2014-04-21 32 views
9

Tôi có nhu cầu lưu trữ khóa riêng cho nhiều người dùng, do đó ứng dụng máy chủ của tôi có thể ký các tệp thay cho họ.Lưu trữ khóa riêng trong cơ sở dữ liệu

Tôi muốn lưu trữ khóa riêng tư một cách an toàn, nhưng tôi không thể tìm thấy các phương pháp hay nhất về việc này. Nếu tôi đã lưu trữ một mật khẩu, tôi sẽ muối + băm mật khẩu để tạo một băm không thể dễ dàng quay lại mật khẩu. Tuy nhiên, với một khóa riêng, tôi cần lưu trữ nó theo cách mà sau này tôi có thể lấy nó.

Tôi đã nghĩ rằng tôi sẽ mã hóa khóa cá nhân và sau đó lưu trữ nó trong cơ sở dữ liệu của tôi. Ban đầu tôi nghĩ mỗi khóa sẽ được mã hóa bằng một mật khẩu khác (dựa trên một số thuộc tính của người dùng). Tuy nhiên, những thuộc tính đó rất có thể sẽ được lưu trữ trong cơ sở dữ liệu, vì vậy nếu cơ sở dữ liệu của tôi bị rò rỉ thì kẻ tấn công có mọi thứ.

Tôi có thể mã hóa tất cả khóa riêng tư bằng một mật khẩu duy nhất chỉ được biết đến trong đơn đăng ký của tôi. Sau đó, một kẻ tấn công sẽ phải ăn cắp cơ sở dữ liệu của tôi, và ứng dụng của tôi để làm bất kỳ tác hại.

Có kỹ thuật/phương pháp hay nhất nào tôi bị thiếu không?

Trả lời

9

Bạn có thể mã hóa khóa cá nhân bằng khóa đối xứng dựa trên mật khẩu người dùng. Đơn giản chỉ cần lưu trữ một muối bổ sung và thực hiện mật khẩu "băm" để có được một khóa riêng biệt. Sau đó sử dụng nó làm khóa để mã hóa khóa riêng. Lưu ý rằng để tạo ra một băm mật khẩu an toàn, một mật khẩu dựa trên Key chức năng phái sinh (PBKDF) chẳng hạn như PBKDF2, bcrypt hoặc scrypt được sử dụng.

Nếu người dùng không trực tuyến tại thời điểm chữ ký cần được tạo, thì bạn thực sự nên bảo vệ mật khẩu theo nghĩa chỉ bạn/backoffice của chúng tôi mới có thể giải mã khóa. Bạn có thể sử dụng một số ID người dùng + khóa bí mật của riêng bạn để tính toán khóa mã hóa/giải mã. Thậm chí bạn có thể muốn tạo một cặp khóa RSA riêng biệt để thực hiện giải mã mã hóa (sử dụng mã hóa lai).

Lưu trữ khóa riêng thay mặt cho người dùng là một việc rất nguy hiểm. Có rất nhiều cách để mất dữ liệu hoặc khóa riêng tư bị lộ (ví dụ: tấn công kênh phụ). Để làm điều đó một cách chuyên nghiệp, bạn nên thực sự sử dụng HSM ở đâu đó trong tiến trình. Nếu đây là bất kỳ dữ liệu nghiêm trọng nào, vui lòng tham khảo ý kiến ​​chuyên gia và luật sư.

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