Làm cách nào để mã hóa một giá trị trong MySQL?

SQL Server cung cấp các chức năng mã hóa và giải mã để bảo mật nội dung của các cột riêng lẻ. Danh sách sau đây xác định các chức năng mã hóa phổ biến

  • EncryptByKey và DecryptByKey

  • EncryptByCert và DecruptByCert

  • EncryptByPassPhrase và DecruptByPassPhrase

  • EncryptByAsymKey và DecryptByAsymKey

Bạn có thể sử dụng các chức năng này ở bất kỳ đâu trong mã của mình; . Trường hợp sử dụng phổ biến là tăng cường bảo mật thời gian chạy bằng cách mã hóa mã thông báo bảo mật của người dùng ứng dụng được chuyển dưới dạng tham số

Các chức năng này tuân theo hệ thống phân cấp mã hóa chung của SQL Server, từ đó sử dụng API bảo vệ dữ liệu của Windows Server

Mã hóa và giải mã đối xứng tiêu thụ tài nguyên tối thiểu và có thể được sử dụng cho các tập dữ liệu lớn

Phần này không đề cập đến Mã hóa dữ liệu minh bạch [TDE] hoặc mã hóa đầu cuối luôn được mã hóa

cú pháp

Ví dụ sau bao gồm cú pháp chung cho EncryptByKey và DecryptByKey

EncryptByKey [  , { 'text to be encrypted' }, { }, {  } ];
DecryptByKey [ 'Encrypted Text' , , {  ]

ví dụ

Ví dụ sau minh họa cách mã hóa Số an sinh xã hội của nhân viên

Ví dụ sau tạo khóa chính cơ sở dữ liệu

USE MyDatabase;
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = '';

Các ví dụ sau tạo chứng chỉ và khóa

CREATE CERTIFICATE Cert01
WITH SUBJECT = 'SSN';
CREATE SYMMETRIC KEY SSN_Key
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Cert01;

Ví dụ sau tạo bảng nhân viên

CREATE TABLE Employees
[
    EmployeeID INT PRIMARY KEY,
    SSN_encrypted VARBINARY[128] NOT NULL
];

Mở khóa đối xứng để mã hóa

OPEN SYMMETRIC KEY SSN_Key
DECRYPTION BY CERTIFICATE Cert01;

Chèn dữ liệu được mã hóa

INSERT INTO Employees [EmployeeID, SSN_encrypted]
VALUES
[1, EncryptByKey[Key_GUID['SSN_Key'] , '1112223333', 1, HashBytes['SHA1', CONVERT[VARBINARY, 1]]];
SELECT EmployeeID,
CONVERT[CHAR[10], DecryptByKey[SSN, 1 , HashBytes['SHA1', CONVERT[VARBINARY, EmployeeID]]]] AS SSN
FROM Employees;

EmployeeID  SSN_Encrypted              SSN
1           0x00F983FF436E32418132..  1112223333

Để biết thêm thông tin, hãy xem Mã hóa cột dữ liệu và phân cấp mã hóa trong tài liệu SQL Server

Sử dụng MySQL

Phiên bản tương thích với MySQL của Amazon Aurora [Aurora MySQL] cung cấp các chức năng mã hóa và giải mã tương tự như SQL Server với hệ thống phân cấp bảo mật đơn giản hơn nhiều và dễ quản lý hơn

Các hàm mã hóa yêu cầu khóa thực dưới dạng chuỗi, vì vậy bạn phải thực hiện các biện pháp bổ sung để bảo vệ dữ liệu. Ví dụ: băm các giá trị chính trên máy khách

Aurora MySQL hỗ trợ các thuật toán mã hóa AES và DES. Bạn có thể sử dụng các chức năng sau để mã hóa và giải mã dữ liệu

  • DecryptByKey [ 'Encrypted Text' , , {  ]
    3

  • DecryptByKey [ 'Encrypted Text' , , {  ]
    4

  • DecryptByKey [ 'Encrypted Text' , , {  ]
    5

  • DecryptByKey [ 'Encrypted Text' , , {  ]
    6

Các hàm

DecryptByKey [ 'Encrypted Text' , , {  ]
7,
DecryptByKey [ 'Encrypted Text' , , {  ]
8,
DecryptByKey [ 'Encrypted Text' , , {  ]
9 và
USE MyDatabase;
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = '';
0 không được dùng nữa bắt đầu với MySQL phiên bản 5. 7. 2 và 5. 7. 6. Mã hóa bất đối xứng không được hỗ trợ trong Aurora MySQL

Amazon Relational Database Service [Amazon RDS] cho MySQL 8 hỗ trợ chế độ FIPS nếu được biên dịch bằng OpenSSL và thư viện OpenSSL cũng như Mô-đun đối tượng FIPS có sẵn trong thời gian chạy. Chế độ FIPS áp đặt các điều kiện đối với các hoạt động mã hóa, chẳng hạn như các hạn chế đối với các thuật toán mã hóa được chấp nhận hoặc các yêu cầu đối với độ dài khóa dài hơn. Để biết thêm thông tin, hãy xem Hỗ trợ FIPS trong tài liệu MySQL

cú pháp

Ví dụ sau đây cho thấy cú pháp chung cho các chức năng mã hóa

DecryptByKey [ 'Encrypted Text' , , {  ]
7

Để biết thêm thông tin, hãy xem AES_ENCRYPTtrong tài liệu MySQL

Rất nên sử dụng vectơ khởi tạo tùy chọn để tránh các cuộc tấn công thay thế toàn bộ giá trị. Khi mã hóa dữ liệu cột, người ta thường sử dụng khóa bất biến làm vectơ khởi tạo. Với phương pháp này, quá trình giải mã không thành công nếu toàn bộ giá trị chuyển sang hàng khác

Cân nhắc sử dụng SHA2 thay vì SHA1 hoặc MD5 vì đã có các khai thác đã biết dành cho SHA1 và MD5. Mật khẩu, khóa hoặc bất kỳ dữ liệu nhạy cảm nào được chuyển đến các chức năng này từ máy khách sẽ không được mã hóa trừ khi bạn đang sử dụng kết nối SSL. Một lợi ích của việc sử dụng Amazon IAM là các kết nối cơ sở dữ liệu được mã hóa bằng SSL theo mặc định

Cho dù bạn phát triển chủ yếu trên Linux hay Windows, bạn có thể đạt được việc triển khai mã hóa tuân thủ với cơ sở dữ liệu MySQL và các biến thể của MySQL như MariaDB. Blog này xem xét một số quyết định quan trọng mà bạn sẽ cần đưa ra về phương pháp mã hóa và cách chúng tôi giúp khách hàng của mình nhận được quyền mã hóa

Sử dụng Nguyên tắc mã hóa tích hợp sẵn của MySQL

MySQL hỗ trợ một số thao tác mã hóa và mã hóa trực tiếp từ ngôn ngữ SQL. Khi mã hóa một cột, bạn có thể sử dụng hàm ENCRYPT, hàm AES_ ENCRYPT, hàm DES_ENCRYPT cũ hơn hoặc thuật toán mã hóa hoặc nén. Nếu bạn muốn sử dụng phương pháp này để mã hóa và giải mã, tôi khuyên bạn nên sử dụng AES_ENCRYPT và AES_DECRYPT. Đối với điều này, MySQL nguyên thủy sử dụng thuật toán AES 128 bit tiêu chuẩn của ngành, được coi là mã hóa mạnh và đáp ứng các quy định tuân thủ

Mặc dù hỗ trợ DES_ENCRYPT vẫn là một phần của các tiêu chuẩn ngành được công nhận, nhưng bạn sẽ có lợi ích về hiệu suất khi sử dụng hỗ trợ AES 128-bit mạnh hơn và không có khả năng gặp phải vấn đề về việc thuật toán Triple DES được sử dụng bởi MySQL sẽ ngừng sử dụng trong tương lai.

Dưới đây là một ví dụ về câu lệnh chèn MySQL sử dụng AES_ENCRYPT với biểu diễn hex của khóa mã hóa


CHÈN VÀO t
GIÁ TRỊ [1,AES_ENCRYPT[‘text’,UNHEX[‘F3229
A0B371ED2D9441B830D21A390C3’]]];


Tất nhiên, mã hóa cứng khóa mã hóa là phương pháp bảo mật kém

Mã hóa ở Lớp ứng dụng

Mã hóa và giải mã trực tiếp trong các câu lệnh SQL của bạn không phải lúc nào cũng khả thi hoặc tối ưu. Đừng lo lắng, bạn cũng có thể triển khai mã hóa trong mã ứng dụng của mình nếu điều đó hợp lý hơn. Alliance Key Manager của chúng tôi bao gồm một số thư viện phần mềm dành riêng cho ngôn ngữ dành cho nhà phát triển. Ví dụ: nếu bạn là nhà phát triển Java, bạn có thể cài đặt và sử dụng Java của chúng tôi. jar để được hỗ trợ đầy đủ cho việc truy xuất khóa mã hóa và mã hóa trên thiết bị. Nếu bạn là nhà phát triển Windows C#, bạn có thể thêm Windows của chúng tôi. NET Client vào dự án Visual Studio của bạn và có hỗ trợ đầy đủ cho việc quản lý khóa. Cả Java và C# đều hỗ trợ mã hóa tuyệt vời - bạn sẽ không cần hỗ trợ từ bên thứ ba để mã hóa AES - nhưng bạn sẽ cần triển khai quản lý khóa mã hóa đúng cách

Một số lý do bạn có thể muốn thực hiện mã hóa ở lớp ứng dụng là gì?

  • Giảm thiểu các thay đổi đối với SQL cho các cơ sở dữ liệu khác nhau
  • Tận dụng phương pháp mã hóa AES 256-bit mạnh mẽ hơn
  • Sử dụng chế độ mã hóa AES sử dụng Vectơ khởi tạo, chẳng hạn như chế độ Chuỗi khối mật mã [CBC]
  • Nhúng thông tin vào trường được mã hóa về khóa được sử dụng, phiên bản của khóa và IV
  • Tạo logic tùy chỉnh để mã hóa các đốm màu lớn hơn trong cơ sở dữ liệu

Bất kể lý do hoặc sự kết hợp của các lý do, việc triển khai mã hóa ở lớp ứng dụng là một lựa chọn dễ thực hiện với SDK ngôn ngữ Trình quản lý khóa của Alliance

Khóa mã hóa ở đâu?

Thách thức lớn nhất mà nhà phát triển sẽ phải đối mặt khi triển khai mã hóa cho MySQL là làm thế nào để quản lý đúng các khóa mã hóa. Không hiểu đúng khiến tổ chức dễ gặp phải các lỗi bảo mật, lỗi kiểm toán và kiện tụng. Dưới đây là một số cách KHÔNG LƯU TRỮ khóa mã hóa

  • Là một phần của câu lệnh SQL [xem bên trên]
  • Trong mã ứng dụng
  • Trong một tệp trên cùng một máy chủ
  • Trong một tệp trên một máy chủ riêng biệt
  • Trong một bảng riêng trong cơ sở dữ liệu MySQL

Tất cả các phương pháp này đều là nguyên nhân gây ra lỗi kiểm toán bảo mật cho khách hàng của chúng tôi. Đừng để điều này xảy ra với bạn

Tóm lược

Các nhà phát triển là những người đi đầu trong việc bảo vệ tổ chức của họ khỏi các vi phạm dữ liệu. Khi họ nhận thức được các yếu tố thành công quan trọng đối với chiến lược mã hóa, họ có thể cải thiện đáng kể tình trạng bảo mật tổng thể của công ty mình

Tại Townsend Security, chúng tôi cung cấp cho các nhà phát triển các công cụ họ cần để thành công và mã hóa đúng cách. Giải pháp quản lý khóa của chúng tôi, Alliance Key Manager, chạy trong tất cả các môi trường nền tảng mà nhà phát triển cần. Các ứng dụng và bộ công cụ phát triển phần mềm đi kèm với Alliance Key Manager chạy trong VMware, đám mây và mọi nơi khác mà bạn có thể triển khai cơ sở dữ liệu MySQL

Làm cách nào để mã hóa văn bản trong MySQL?

Hàm AES_ENCRYPT của MySQL được sử dụng để mã hóa chuỗi bằng thuật toán Tiêu chuẩn mã hóa nâng cao [AES]. Hàm MySQL AES_ENCRYPT mã hóa dữ liệu với độ dài khóa 128 bit nhưng nó có thể được mở rộng lên tới độ dài khóa 256 bit. Nó mã hóa một chuỗi và trả về một chuỗi nhị phân.

MySQL có mã hóa không?

MySQL Enterprise TDE cho phép mã hóa dữ liệu lưu trữ bằng cách mã hóa các tệp vật lý của cơ sở dữ liệu . Dữ liệu được mã hóa tự động, theo thời gian thực, trước khi ghi vào bộ nhớ và được giải mã khi đọc từ bộ nhớ. Do đó, tin tặc và người dùng độc hại không thể đọc dữ liệu nhạy cảm trực tiếp từ các tệp cơ sở dữ liệu.

Làm cách nào để mã hóa trường mật khẩu trong MySQL?

Máy chủ MySQL sử dụng chức năng MẬT KHẨU để mã hóa mật khẩu MySQL để lưu trữ trong cột Mật khẩu của bảng cấp người dùng. Giá trị do hàm MẬT KHẨU trả về là một chuỗi được băm hoặc NULL nếu đối số là NULL. Hàm MẬT KHẨU nhận một tham số là chuỗi cần mã hóa.

Làm cách nào để mã hóa chuỗi giải mã trong MySQL?

Hàm DES_DECRYPT nhận 2 tham số là chuỗi mã hóa và chuỗi khóa để giải mã chuỗi. cú pháp. DES_DECRYPT[encrypted_string, key_string];

Chủ Đề