Mã hóa trong MySQL: Xoay vòng khóa chính

Dự đoán về việc bắt đầu tuyển sinh mới cho khóa học "Cơ sở dữ liệu" chúng tôi tiếp tục xuất bản một loạt bài viết về mã hóa trong MySQL.

Trong phần trước của loạt bài này, chúng ta đã thảo luận cách mã hóa khóa chính hoạt động. Hôm nay, dựa trên kiến ​​​​thức thu được trước đó, chúng ta hãy xem cách xoay của các phím chính.

Xoay vòng khóa chính liên quan đến việc tạo khóa chính mới và mã hóa lại các khóa của vùng bảng (được lưu trữ trong tiêu đề vùng bảng) bằng khóa mới này.

Hãy nhớ lại tiêu đề của một không gian bảng được mã hóa trông như thế nào:

Mã hóa trong MySQL: Xoay vòng khóa chính

Từ bài viết trước, chúng ta biết rằng máy chủ đọc các tiêu đề của tất cả các vùng bảng được mã hóa khi khởi động và ghi nhớ KEY ID lớn nhất. Ví dụ: nếu chúng ta có ba bảng có KEYID = 3 và một bảng có KEYID = 4, thì ID khóa tối đa sẽ là 4. Hãy gọi đây là ID KHÓA - MAX KEY ID.

Cách xoay phím chính hoạt động

1. Người dùng thực hiện ALTER INNODB MASTER KEY.

2. Máy chủ yêu cầu khóa để tạo khóa chính mới với UUID và KEY của máy chủID bằng một cộng với MAXKEYNHẬN DẠNG. Vì vậy, chúng tôi nhận được id khóa chính bằng INNODBKHÓA-UUID-(TỐI ĐAKEYID + 1). Sau khi tạo thành công khóa chính, MAX KEY ID được tăng thêm một (tức là MAXKEYID=MAXKEYMã số +1).

3. Máy chủ quét tất cả các vùng bảng được mã hóa bằng khóa chính và đối với từng vùng bảng:

  • mã hóa khóa vùng bảng bằng khóa chính mới;

  • cập nhật key id thành MAX mớiKEYTÔI;

  • nếu UUID khác với UUID của máy chủ thì hãy cập nhật UUID của máy chủ.

Như chúng ta đã biết, Master Key ID được sử dụng để giải mã một bảng bao gồm một UUID và một ID KEY được đọc từ tiêu đề vùng bảng. Những gì chúng tôi đang làm bây giờ là cập nhật thông tin này trong tiêu đề mã hóa không gian bảng để máy chủ nhận được khóa chính chính xác.

Nếu chúng ta có các vùng bảng từ các vị trí khác nhau, chẳng hạn như các bản sao lưu khác nhau, thì chúng có thể sử dụng các khóa chính khác nhau. Tất cả các khóa chính này sẽ cần được truy xuất từ ​​​​kho lưu trữ khi máy chủ khởi động. Điều này có thể làm chậm quá trình khởi động máy chủ, đặc biệt nếu sử dụng kho lưu trữ khóa phía máy chủ. Với xoay khóa chính, chúng tôi mã hóa lại các khóa của vùng bảng bằng một khóa chính duy nhất giống nhau cho tất cả các vùng bảng. Bây giờ, máy chủ sẽ chỉ nhận được một khóa chính khi khởi động.

Tất nhiên, đây chỉ là một tác dụng phụ dễ chịu. Mục đích chính của xoay khóa chính là làm cho máy chủ của chúng tôi an toàn hơn. Trong trường hợp khóa chính bị đánh cắp bằng cách nào đó từ kho tiền (ví dụ: từ Máy chủ Vault), có thể tạo khóa chính mới và mã hóa lại các khóa vùng bảng, làm mất hiệu lực khóa bị đánh cắp. Chúng ta an toàn...gần như vậy.

Trong một bài viết trước, tôi đã nói về việc một khi khóa vùng bảng bị đánh cắp, bên thứ ba có thể sử dụng nó để giải mã dữ liệu. Với điều kiện là có quyền truy cập vào đĩa của chúng tôi. Nếu khóa chính bị đánh cắp và bạn có quyền truy cập vào dữ liệu được mã hóa, thì bạn có thể sử dụng khóa chính bị đánh cắp để giải mã khóa vùng bảng và lấy dữ liệu đã giải mã. Như bạn có thể thấy, việc xoay phím chính không giúp ích gì trong trường hợp này. Chúng tôi mã hóa lại khóa vùng bảng bằng khóa chính mới, nhưng khóa thực được sử dụng để mã hóa/giải mã dữ liệu vẫn giữ nguyên. Do đó, "hacker" có thể tiếp tục sử dụng nó để giải mã dữ liệu. Trước đó tôi đã gợi ý rằng Máy chủ Percona cho MySQL có thể thực hiện mã hóa lại vùng bảng thực sự, không chỉ mã hóa lại khóa vùng bảng đơn giản. Tính năng này được gọi là chủ đề mã hóa. Tuy nhiên, chức năng này vẫn đang thử nghiệm vào lúc này.

Xoay khóa chính rất hữu ích khi khóa chính bị đánh cắp, nhưng không có cách nào để kẻ tấn công sử dụng nó và giải mã các khóa của vùng bảng.

Đăng ký một bài học demo miễn phí.

Đọc thêm:

Nguồn: www.habr.com