it-swarm-vi.com

Nơi lưu trữ khóa mã hóa phía máy chủ?

Tôi có một số dữ liệu được mã hóa đối xứng với một khóa duy nhất trong cơ sở dữ liệu của tôi. Thay vì cứng mã hóa nó vào mã của tôi, tôi đang tìm kiếm một cách an toàn hơn để lưu trữ khóa mã hóa. Tôi có thể cất nó ở đâu một cách an toàn?

129
Radek

Dưới đây là khả năng của bạn, đại khái là theo thứ tự tinh vi giảm dần.

  1. Sử dụng Mô-đun bảo mật phần cứng bên ngoài. toàn bộ ngành sản phẩm được thiết kế để giảm tải các hoạt động nhạy cảm bảo mật cho các thiết bị bên ngoài. Điều này không giải quyết vấn đề rất nhiều như di dời, nhưng nó chuyển nó sang thiết bị an toàn hơn nhiều, vì vậy hoàn toàn là một chiến thắng bảo mật. Nếu bạn đang làm bất cứ điều gì cao, thì điều này gần như chắc chắn sẽ ảnh hưởng đến giải pháp của bạn.

  2. Buộc mã hóa vào phần cứng của bạn. Về lý thuyết, các HSM thực hiện chính xác điều này, chỉ chúng ta có xu hướng mong đợi một chút tinh vi từ một HSM hơn là chỉ là tiền điện tử được hỗ trợ bởi phần cứng . Nhưng có những lựa chọn rẻ hơn có sẵn nếu bạn không cần thông lượng và tuân thủ mà một HSM thực sự mang đến cho bảng. Chip TPM được phát minh một phần cho mục đích này và nhiều ví dụ tồn tại cho thấy cách tích hợp với chúng. Ngoài ra, phần cứng tiền điện tử chuyên dụng đã trở nên khá rẻ và các thiết bị tái sử dụng như Khóa U2F mã nguồn mở vì điều này đơn giản hơn âm thanh.

  3. Buộc khóa mã hóa vào thông tin đăng nhập quản trị viên của bạn (ví dụ: mã hóa khóa mã hóa bằng thông tin đăng nhập quản trị viên của bạn). Điều này chỉ hữu ích một chút vì nó yêu cầu bạn phải đăng nhập để mã hóa/giải mã mọi thứ. Nhưng về mặt tích cực, không ai có thể mã hóa/giải mã bất cứ điều gì trừ khi bạn đăng nhập (nghĩa là kiểm soát tốt hơn). Phần lớn lưu trữ an toàn trong Windows hoạt động như thế này.

  4. Nhập khóa mã hóa khi bạn khởi động, lưu nó vào bộ nhớ. Điều này bảo vệ chống lại các cuộc tấn công ngoại tuyến (trừ khi chúng chiếm được khóa từ RAM, đó là khó khăn hơn để làm). Tương tự như tùy chọn ở trên, nhưng cũng khác nhau. Tuy nhiên, máy chủ khởi động vào trạng thái không thể sử dụng được, yêu cầu bạn cung cấp khóa thủ công trước khi hoàn thành công việc.

  5. Lưu trữ khóa trên một máy chủ khác. Ví dụ: đặt khóa trên máy chủ web và dữ liệu được mã hóa trên máy chủ cơ sở dữ liệu. Điều này bảo vệ bạn ở một mức độ nào đó bởi vì ai đó sẽ phải biết để lấy khóa cũng như cơ sở dữ liệu và họ cũng phải có quyền truy cập vào cả hai máy chủ. Không an toàn đáng kinh ngạc, nhưng dù sao một lựa chọn cực kỳ phổ biến. Hầu hết những người nghĩ rằng họ đang làm điều đó phải làm theo cách này. Nếu bạn đang xem xét làm điều này, thì cũng xem xét một trong hai tùy chọn đầu tiên được đề cập ở trên.

  6. Lưu trữ khóa ở nơi khác trên cùng một máy chủ. Thêm bảo mật cận biên, nhưng không phải là toàn bộ. Hầu hết các hoạt động nhỏ hơn làm điều này - họ không nên, nhưng họ làm. Thông thường bởi vì họ chỉ có một máy chủ và nó chạy trong một số đám mây ở đâu đó. Điều này giống như gõ một chìa khóa vào cửa thay vì để nó trong ổ khóa; đảm bảo ngăn chặn những kẻ bất tài nhất của những kẻ tấn công.

  7. Lưu trữ khóa trong cơ sở dữ liệu. Bây giờ bạn thậm chí không thử. Tuy nhiên, một lựa chọn phổ biến chán nản.

Nhiều giải pháp KMS dựa trên đám mây (ví dụ: AWS , GCP , Azure ) khi được sử dụng hiệu quả nhất sẽ liên kết mã hóa của bạn với VM hoặc môi trường đám mây của bạn. Nhận dạng duy nhất của VM rất dễ để nhà ảo thuật thiết lập và khẳng định, và KMS sử dụng kết hợp danh tính đó và các quyền bạn đã gán cho phép truy cập vào quản lý HSM Khóa mã hóa này tương tự như sự kết hợp của các tùy chọn 1 và 2, được điều chế để giải thích tính chất phù du của Cloud VM. Các giải pháp KMS này thường tương thích với các cơ chế nhận dạng khác của nền tảng, gắn các khóa mã hóa vào các khóa đăng nhập một cách hiệu quả phương án 3.

145
tylerl

Tôi nhận ra điều này đã được trả lời cách đây một thời gian, nhưng để đưa ra một vài ví dụ cho câu trả lời hay của Tyler:

  • Tôi dự định sử dụng # của mình để buộc mật khẩu vào tài khoản dịch vụ và sử dụng lệnh ghép ngắn Powershell để lấy nó. Bằng cách đó, các kịch bản không cần phải được sửa đổi nhiều. Mật khẩu của tài khoản dịch vụ nằm trong Active Directory và trước tiên sẽ phải bị xâm phạm. Điều này làm việc cho tôi vì tôi đã sử dụng nó trên hai máy chủ.

  • Đối với anh ấy # 5, để đáp ứng sự tuân thủ của chúng tôi, chúng tôi có thể lưu trữ một khóa bằng văn bản đơn giản trên một máy chủ khác có bộ nhớ ngoài vì bộ nhớ đó đã được mã hóa và quyền truy cập vào nó bị hạn chế. Như Tyler đề cập đến cái sau có vẻ không an toàn lắm, nhưng nó đủ tốt ngay cả đối với một người đánh giá khó tính.

5
Mike

Bạn có thể tạo kiến ​​trúc hai lớp để quản lý khóa.

  1. Một khóa để mã hóa dữ liệu của bạn trong phần còn lại mã hóa các không gian bảng hoặc dựa trên cột.
  2. Phím chính để mở khóa 1.

đối với (các) khóa chính của bạn, hãy sử dụng một trong những giải pháp quản lý khóa đã thiết lập, chẳng hạn như:

  • Amazon AWS KMS
  • Kho tiền của Oracle
  • Microsoft MKS.
  • hoặc những nguồn mở.

Chỉ cần lưu ý rằng trình quản lý khóa của bạn phải hỗ trợ tính sẵn có bằng hoặc cao hơn cơ sở hạ tầng của bạn nơi sử dụng khóa được quản lý.

2
Hugo R