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' , , { ]
3DecryptByKey [ 'Encrypted Text' , , { ]
4DecryptByKey [ 'Encrypted Text' , , { ]
5DecryptByKey [ '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
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