Điểm:1

Nơi lưu trữ muối cho PBKDF2 và vectơ khởi tạo cho AES thông qua WebCrypto

lá cờ in

Tôi muốn tạo ghi chú an toàn qua javascript và webcrypto.

Tôi đã tìm thấy các khả năng tạo khóa mạnh thông qua PBKDF2 và mã hóa dữ liệu qua AES.

Đây là một ví dụ về cách tạo khóa thông qua PBKDF2 trong webcrypto, nơi cần có muối:

hàm getKey(keyMaterial, salt) {
    trả về window.crypto.subtle.deriveKey(
      {
        "tên": "PBKDF2",
        muối: muối, 
        "lặp lại": 100000,
        "băm": "SHA-256"
      },
      vật liệu chính,
      { "name": "AES-GCM", "length": 256},
      thật,
      [ "giải mã mã hóa" ]
    );
  }

https://github.com/mdn/dom-examples/blob/master/web-crypto/derive-key/pbkdf2.js#L37-L50

Khóa này được sử dụng để mã hóa dữ liệu:

để keyMaterial = đang chờ getKeyMaterial();
muối = window.crypto.getRandomValues(new Uint8Array(16));
để chìa khóa = đang chờ getKey(keyMaterial, salt);
iv = window.crypto.getRandomValues(new Uint8Array(12));
để mã hóa = getMessageEncoding();

ciphertext = đang chờ window.crypto.subtle.encrypt(
  {
    tên: "AES-GCM",
    iv: iv
  },
  Chìa khóa,
  được mã hóa
);

Tôi sẽ cần thông tin này để giải mã trong tương lai. Tôi muốn xuất dữ liệu này từ trình duyệt và giải mã dữ liệu này sau bằng mật khẩu được cung cấp.

Tôi muốn có định dạng JSON sau:

dữ liệu: {
  ghi chú: [
        {
         được mã hóaLưu ý: '..',
         thứ năm: '..',
        }
        ]
  Muối: '..'
}

Bây giờ tôi không chắc làm thế nào để lưu trữ véc tơ khởi tạo và muối an toàn? Có thể lưu trữ dữ liệu như trên không?

Điểm:1
lá cờ in

Chắc chắn, muối và IV có thể được lưu trữ dưới dạng bản rõ.

Lưu ý rằng IV đôi khi là tĩnh hoặc được tính toán từ PBKDF2 (nếu khóa + IV không vượt quá kích thước đầu ra của hàm băm). Rốt cuộc, khóa là duy nhất cho mỗi tổ hợp muối + mật khẩu. Tuy nhiên, có vẻ như bạn muốn lưu trữ nhiều ghi chú bằng một mật khẩu/khóa duy nhất, vì vậy trong trường hợp đó, một IV riêng biệt sẽ hợp lý.

Tôi sẽ thêm số phiên bản vào giao thức của bạn và đảm bảo rằng số lần lặp lại có thể được điều chỉnh.Cá nhân tôi cũng sẽ tính toán giá trị kiểm tra khóa để xác thực mật khẩu, nếu không, bạn sẽ phải giải mã một ghi chú chỉ để kiểm tra xem mật khẩu có đúng không.

Coi chừng các tin nhắn có thể bị xóa hoặc sắp xếp lại ngay cả từ nhiều khối dữ liệu (giả sử cùng một mật khẩu) trong sơ đồ hiện tại của bạn; mã hóa chỉ bảo vệ các tin nhắn riêng lẻ.


Cá nhân tôi muốn một số loại tiền điện tử bất đối xứng cho các giao thức như thế này, nhưng tôi không biết liệu điều đó có khả thi trong ngữ cảnh của bạn hay không. Mã hóa dựa trên mật khẩu không phải là hình thức bảo vệ mạnh nhất hiện có.

knaccc avatar
lá cờ es
Bạn có thể giải thích những lợi thế của tiền điện tử bất đối xứng cho trường hợp sử dụng này không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.