2011-10-07 43 views
8

Tôi cần mã hóa nội dung trong ứng dụng web của mình theo từng người dùng.Tôi làm cách nào để mã hóa nội dung của người dùng trên trang web của mình để thậm chí tôi không thể truy cập nội dung?

Tôi, người dùng root, không muốn có quyền truy cập vào nội dung, thời gian của người dùng.

Tôi làm cách nào để người dùng là người duy nhất có quyền truy cập vào nội dung của họ? Có lẽ tôi có thể làm cho nó băm mật khẩu đăng nhập của họ hoạt động như một khóa mã hóa và giải mã (mật khẩu của họ được lưu trữ một cách băm trong cơ sở dữ liệu của tôi và băm mã hóa/giải mã được tạo từ mật khẩu thô của họ khi đăng nhập và được lưu trữ trong một cookie địa phương)? Nhưng nếu họ thay đổi mật khẩu thì sao? Sau đó, tôi phải cập nhật tất cả nội dung của họ mà có thể mất rất nhiều sức mạnh xử lý.

Có phương pháp mã hóa nào cung cấp phương thức mã hóa này mà không phải mã hóa lại nội dung của họ nếu mật khẩu của họ thay đổi không? Một cái gì đó tương tự như ecryptfs trên Linux, có lẽ? Nghiên cứu ecryptfs có phải là nơi tốt để bắt đầu không?

Làm cho nó chỉ để người dùng có thể truy cập nội dung của họ trên máy chủ của tôi (và thậm chí không phải tôi) thậm chí khả thi?

+0

Tôi tự hỏi làm thế nào hushmail.com thực hiện điều này. – SQLMason

+0

Đây là một bài báo trắng về sự xâm phạm của họ: http://www.hushmail.com/public_documents/Hush%20Encryption%20Engine%20White%20Paper.pdf –

+0

Từ một phản hồi email từ Hushmail: Hệ thống của chúng tôi được thiết kế theo cách mà chỉ với cụm mật khẩu của bạn có thể email được mã hóa trong tài khoản của bạn được giải mã. Cụm mật khẩu chính nó là được lưu trữ trong một mã băm được mã hóa để ngay cả nhân viên của chúng tôi cũng không thể nhìn thấy nó. Điều này có nghĩa là nếu thư của bạn được mã hóa, chúng tôi không thể đọc được. –

Trả lời

11

Process:

  1. Tạo một bí mật ngẫu nhiên để mã hóa nội dung của họ.
  2. Sử dụng mật khẩu được cung cấp của họ mã hóa bí mật ngẫu nhiên từ # 1.
  3. Lưu trữ mật khẩu của họ dưới dạng băm một chiều (với muối, có thể là đa băm).

Khi Thay đổi mật khẩu:

  1. Tái tạo ra các giá trị từ bướC# 2.
  2. Tạo lại bộ đệm băm từ bướC# 3.

Khi Login:

  1. mật khẩu Hash và đối chiếu với hash được tạo ra trong bướC# 3.
  2. Nếu mật khẩu khớp - hãy sử dụng mật khẩu được cung cấp thực tế để giải mã bí mật ngẫu nhiên từ # 2.
  3. Sử dụng bí mật ngẫu nhiên từ # 2 để mở khóa dữ liệu được mã hóa ở # 1.

Ghi chú:

  • Không ai có thể giải mã các dữ liệu mà không biết bí mật ngẫu nhiên (# 1). Bí mật ngẫu nhiên chỉ có thể được mở khóa bằng mật khẩu thực của người dùng (# 2) (thiếu sức mạnh vũ phu). Mật khẩu thực của người dùng chỉ được biết dưới dạng băm một chiều (# 3) để bạn có thể xác nhận nó giống nhau, nhưng không thể giải mã nó và phục hồi # 2.
  • Không thể thực hiện quy trình quên mật khẩu (bạn có thể tạo lại # 3, nhưng khóa ngẫu nhiên trong # 2 hiện bị mất vì mọi thứ đã bị khóa trong hầm của chúng).
  • Bạn không phải mã hóa lại mọi thứ trong bướC# 1 mỗi khi họ thay đổi mật khẩu, chỉ có bí mật ngẫu nhiên (đơn giản/nhanh) từ # 2.
  • Nếu bạn lưu trữ mật khẩu được cung cấp hoặc bí mật ngẫu nhiên được tạo ở bước 1 hoặc nội dung (được giải mã) của họ ở bất kỳ nơi nào bạn có thể gây rò rỉ dữ liệu.
+1

Bạn đã tạo, nhưng miễn là bạn không lưu trữ - không. Cách duy nhất để tìm ra nó là có mật khẩu để giải mã dạng mã hóa từ # 2. Hoặc thông qua sức mạnh vũ phu;) Bạn có thể sử dụng băm từ mật khẩu của họ ở bước này nhưng bạn * không thể * sử dụng biểu mẫu băm mà bạn lưu trữ (nếu không, bạn có thể giải mã nó mà không biết mật khẩu của họ) – Rudu

+0

Xin lỗi, tôi đã xóa nhận xét của tôi vì Tôi đã hỏi một câu hỏi mà tôi có thể trả lời là tôi đã đọc bài đăng của bạn chặt chẽ hơn. Tôi thích ý tưởng của bạn. –

+0

Không phải là có thể tạo ra phía khách hàng bí mật ngẫu nhiên? Bằng cách này bạn thực sự đảm bảo rằng bạn thậm chí không nhìn thấy bí mật –

-1

Bạn biết rằng bạn cần sử dụng mật khẩu của họ làm khóa.

Tôi sẽ không khỉ với ecryptfs vì hệ thống tệp được mã hóa không phải là giải pháp tốt nhất. Bạn sẽ không muốn dữ liệu của một người dùng được mã hóa bằng chính khóa mà người dùng khác đã sử dụng.

Khi bạn mã hóa dữ liệu, bạn nên tạo một chuỗi ngẫu nhiên để sử dụng làm muối. Điều này ngăn người khác sử dụng danh sách băm được tạo trước để giải mã dữ liệu của bạn. Nó cũng thay đổi băm của hai người có thể sử dụng cùng một mật khẩu.

Khi người dùng thay đổi mật khẩu của họ, bạn sẽ phải mã hóa lại dữ liệu và tạo ra giá trị muối mới. Đây là mức độ bảo mật mà tôi mong đợi với tư cách là một khách hàng, khi biết rằng khi tôi thay đổi mật khẩu, tôi sẽ mã hóa lại tất cả dữ liệu của mình để ngăn người khác cố gắng tạo sức mạnh cho khóa của tôi.

Bạn có thể lưu trữ giá trị muối trong cơ sở dữ liệu không được mã hóa.

+1

Với eCryptfs, dữ liệu của mỗi người dùng có thể được mã hóa bằng khóa riêng của họ. –

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