2008-09-08 67 views
19

Công ty của tôi sẽ lưu trữ dữ liệu nhạy cảm cho khách hàng của chúng tôi và sẽ mã hóa dữ liệu bằng một trong các lớp thuật toán mã hóa .NET được quản lý. Hầu hết các công việc được thực hiện, nhưng chúng tôi đã không tìm ra cách/nơi để lưu trữ chìa khóa. Tôi đã thực hiện một số tìm kiếm và đọc ánh sáng và có vẻ như giải pháp phần cứng có thể là giải pháp an toàn nhất. Có ai có bất kỳ đề xuất về một giải pháp lưu trữ quan trọng hoặc phương pháp?Lưu trữ khóa đối xứng


Cảm ơn câu trả lời của bạn, mọi người.

spoulson, vấn đề thực sự là cả hai "phạm vi" mà bạn đã đề cập. Tôi cho rằng tôi nên rõ ràng hơn.

Bản thân dữ liệu, cũng như logic mã hóa và giải mã nó được trừu tượng hóa thành nhà cung cấp hồ sơ ASP.NET. Nhà cung cấp tiểu sử này cho phép cả thuộc tính hồ sơ được mã hóa cũng như các thuộc tính văn bản thuần túy. Các giá trị thuộc tính được mã hóa được lưu trữ chính xác giống như các văn bản thuần túy - với ngoại lệ rõ ràng là chúng đã được mã hóa.

Điều đó nói rằng, chìa khóa sẽ cần để có thể được triệu tập cho một trong ba lý do:

  1. Các ứng dụng web được ủy quyền, chạy trên một máy chủ ủy quyền, cần để mã hóa dữ liệu.
  2. Giống như # 1, nhưng để giải mã dữ liệu.
  3. Thành viên được ủy quyền trong nhóm doanh nghiệp của chúng tôi cần xem dữ liệu được mã hóa.

Cách tôi tưởng tượng rằng không ai thực sự biết khóa - sẽ có một phần mềm kiểm soát việc mã hóa và giải mã dữ liệu thực tế. Điều đó nói rằng, khóa vẫn cần phải đến từ ở đâu đó.

Tiết lộ đầy đủ - nếu bạn không thể nói, trước đây tôi chưa bao giờ làm điều gì như thế này, vì vậy nếu tôi hoàn toàn dựa vào nhận thức của tôi về cách thức hoạt động này, bằng mọi cách, hãy cho tôi biết.

Trả lời

9

Chỉ có hai giải pháp thực sự cho (khía cạnh kỹ thuật của) vấn đề này. Giả sử nó chỉ bản thân ứng dụng mà cần truy cập chìa khóa ...

  1. Hardware Security Module (HSM) - thường khá đắt tiền, và không đơn giản để thực hiện. Có thể là thiết bị chuyên dụng (ví dụ: nCipher) hoặc mã thông báo cụ thể (ví dụ: Alladin eToken). Và sau đó bạn vẫn phải xác định cách xử lý phần cứng đó ...

  2. DPAPI (API bảo vệ dữ liệu Windows). Có các lớp cho điều này trong System.Security.Cryptography (ProtectedMemory, ProtectedStorage, vv). Bàn tay này tắt quản lý quan trọng cho hệ điều hành - và nó xử lý nó tốt. Được sử dụng trong "USER_MODE", DPAPI sẽ khóa giải mã khóa cho người dùng đã mã hóa nó. (Nếu không đi quá chi tiết, mật khẩu của người dùng là một phần của chương trình mã hóa/giải mã - và không có, thay đổi mật khẩu không hôi nó lên.)

thêm: tốt nhất để sử dụng DPAPI để bảo vệ chính chủ của bạn và không mã hóa trực tiếp dữ liệu của ứng dụng của bạn. Và đừng quên đặt ACL mạnh trên khóa được mã hóa của bạn ...

0

Đặt cược tốt nhất của bạn là bảo mật vật lý phần cứng mà khóa đang bật. Ngoài ra, không bao giờ ghi nó vào đĩa - tìm một số cách để ngăn chặn phần đó của bộ nhớ được phân trang vào đĩa. Khi mã hóa/giải mã khóa cần được tải vào bộ nhớ, và với phần cứng không an toàn luôn có địa điểm tấn công này.

Có, như bạn đã nói, các thiết bị mã hóa phần cứng nhưng chúng không mở rộng - tất cả mã hóa/giải mã đều đi qua chip.

+1

Lớp SecureString trong .Net giải quyết vấn đề về phân trang thành đĩa. –

0

Bạn có thể mã hóa khóa đối xứng bằng cách sử dụng khóa đối xứng khác bắt nguồn từ mật khẩu sử dụng một cái gì đó như PBKDF2.

Cho người dùng trình bày mật khẩu, tạo khóa mới được sử dụng để mã hóa dữ liệu, tạo khóa khác bằng mật khẩu, sau đó mã hóa và lưu trữ khóa mã hóa dữ liệu.

Nó không an toàn như sử dụng mã thông báo phần cứng, nhưng nó vẫn có thể đủ tốt và khá dễ sử dụng.

0

Tôi nghĩ rằng tôi đã hiểu nhầm câu hỏi của bạn.Những gì bạn đang yêu cầu không nằm trong phạm vi ứng dụng xử lý lưu trữ khóa của nó như thế nào, nhưng thay vào đó công ty của bạn sẽ lưu trữ nó như thế nào.

Trong trường hợp đó, bạn có hai lựa chọn rõ ràng:

  • vật lý: Viết thư cho ổ đĩa USB, ghi ra CD, vv Store trong vị trí an toàn về thể chất. Nhưng bạn chạy vào vấn đề đệ quy: nơi nào bạn lưu trữ chìa khóa vào hầm? Thông thường, bạn ủy nhiệm 2 hoặc nhiều người (hoặc một nhóm) để giữ các phím.

  • Phần mềm: Cyber-Ark Private Ark là công ty tôi sử dụng để lưu trữ thông tin kỹ thuật số bí mật của nó. Chúng tôi lưu trữ tất cả mật khẩu quản trị, khóa cấp phép, khóa riêng, v.v. Nó hoạt động bằng cách chạy một máy chủ "vault" Windows không được kết nối với miền, tường lửa tất cả các cổng ngoại trừ cổng của riêng nó và lưu trữ tất cả dữ liệu được mã hóa trên đĩa. Người dùng truy cập thông qua giao diện web xác thực người dùng lần đầu tiên, sau đó giao tiếp an toàn với máy chủ vault qua giao diện giống như người khám phá. Tất cả các thay đổi và phiên bản được ghi lại. Nhưng, điều này cũng có cùng một vấn đề đệ quy ... một đĩa CD truy cập quản trị viên chính. Điều này được lưu trữ trong kho vật lý của chúng tôi với truy cập hạn chế.

0

Sử dụng khóa mã hóa cứng để mã hóa khóa được tạo trước khi ghi. Sau đó, bạn có thể viết nó bất cứ nơi nào.

Có, bạn có thể tìm thấy khóa mã hóa cứng, nhưng miễn là bạn giả định OK để lưu trữ khóa đối xứng ở bất kỳ đâu, nó không kém an toàn.

0

Tùy thuộc vào ứng dụng của bạn, bạn có thể sử dụng phương pháp Diffie-Hellman để hai bên đồng ý một cách an toàn về khóa đối xứng.

Sau khi trao đổi ban đầu, an toàn, khóa được thỏa thuận và phần còn lại của phiên (hoặc phiên mới) có thể sử dụng khóa đối xứng mới này.

1

Để đối phó với # 3 này answer từ OP

Một cách để các thành viên có thẩm quyền để có thể xem các dữ liệu được mã hóa, nhưng nếu không có họ thực sự biết chìa khóa sẽ được sử dụng ký quỹ chính (rsa labs)(wikipedia)

Tóm lại, khóa được chia thành các phần riêng biệt và được trao cho 'người được ủy thác'. Do tính chất của các khóa riêng, mỗi phân đoạn là vô dụng bởi bản thân nó. Tuy nhiên, nếu dữ liệu là cần thiết để được giải mã sau đó các 'ủy viên' có thể lắp ráp các phân đoạn của họ vào toàn bộ khóa.

1

Chúng tôi có cùng một vấn đề và đã trải qua quá trình tương tự.
Chúng ta cần có một quá trình khởi động trên một máy tính (máy khách) mà sau đó đăng nhập vào một máy tính thứ hai (máy chủ cơ sở dữ liệu).

Chúng tôi hiện tin rằng việc thực hành tốt nhất sẽ là:

  • điều hành bằng tay bắt đầu quá trình trên máy tính của khách hàng.
  • Trình điều khiển nhắc PC của máy khách dành cho thông tin đăng nhập cá nhân cá nhân của mình.
  • Nhà điều hành nhập thông tin đăng nhập của anh ấy.
  • Máy tính khách sử dụng các thông tin này để đăng nhập vào máy chủ cơ sở dữ liệu.
  • Máy tính khách yêu cầu thông tin đăng nhập riêng của mình từ máy chủ cơ sở dữ liệu.
  • Máy chủ cơ sở dữ liệu kiểm tra thông tin xác thực đăng nhập của nhà điều hành được ủy quyền để nhận thông tin xác thực của quá trình khách hàng và trả lại chúng cho máy khách.
  • Client PC đăng xuất khỏi máy chủ datbase.
  • Client PC đăng nhập lại vào máy chủ cơ sở dữ liệu bằng thông tin đăng nhập của chính nó.

Có hiệu quả, mật khẩu đăng nhập của nhà điều hành là chìa khóa, nhưng nó không được lưu trữ ở bất cứ đâu.

Các vấn đề liên quan