Điểm:0

Tính ngẫu nhiên và xác thực trên đầu ra giá trị ngắn (48 bit)

lá cờ cn

Tôi muốn triển khai ứng dụng khách tạo giá trị 48 bit ngẫu nhiên và gửi chúng dưới dạng tin nhắn quảng bá. Chúng tôi cũng giả định rằng có một người nhận hợp pháp nhận được các giá trị đó (vì vậy, có một số loại xác thực trước đã xảy ra nhưng nó không quan trọng ở đây. Chúng tôi cũng có thể giả sử máy khách/người nhận chia sẻ một khóa chung $K$). Vì đây là những thông báo quảng bá, điều đó cũng có nghĩa là bất kỳ ai cũng có thể chặn các giá trị đó. Tôi muốn những giá trị đó có hai thuộc tính:

  1. Kẻ tấn công khó đoán được giá trị ngẫu nhiên tiếp theo trong chuỗi
  2. Người nhận sẽ có thể xác minh rằng các giá trị này thực sự đến từ máy khách cụ thể

Tôi đã nghĩ về một kế hoạch đơn giản như sau:

Khách hàng

  1. $t$ = AES-CTR($K$, nonce||bộ đếm, random_plaintext)â

  2. $r = t â K$ (giữ 48 bit cuối cùng)

  3. Phát tin $t, r$

Tôi sử dụng AES-CTR để tạo chuỗi tìm kiếm ngẫu nhiên tạm thời $t$ và sau đó XOR nó với khóa một lần nữa để tạo giá trị ngẫu nhiên của tôi.Sau đó tôi giữ 48 bit cuối cùng và phát cả hai $t$$r$. Sau đó, người nhận có thể chỉ cần:

Người nhận

  1. $r' = t â K$ (giữ 48 bit cuối cùng)
  2. Thẩm tra $r' == r$

Nếu kiểm tra thành công thì anh ta xác thực ứng dụng khách vì chỉ anh ta biết cùng một khóa $K$. Ngoài ra, giá trị là đầu ra của AES-CTR phải khá ngẫu nhiên, nghĩa là rất khó để ai đó đoán được giá trị tiếp theo.

Chương trình này có đạt được yêu cầu của tôi không? Việc cắt bớt 48 bit cuối có gây rủi ro bảo mật không?

Paul Uszak avatar
lá cờ cn
1) Tại sao không sử dụng các giao thức chuẩn để xác thực, ví dụ: RSA, HMAC? 2) Làm thế nào để (K, nonce||counter, random_plaintext) tồn tại khi khởi động lại? 3) Có vấn đề gì về TRNG/urandom không? 4) Kẻ tấn công có thể sẽ va chạm các số của bạn trong vòng $2^{24}$ lần thử. Điều đó có quan trọng không? 5) Tại sao chỉ có 48 bit?
Điểm:0
lá cờ tr

Chương trình này có đạt được yêu cầu của tôi không? Việc cắt bớt 48 bit cuối có gây rủi ro bảo mật không?

Kế hoạch bị phá vỡ bởi một kẻ thù thụ động chỉ nhận được một cặp $(t,r)$. Quan sát rằng 48 bit cuối cùng của khóa có thể được phục hồi dưới dạng $K[:48] = t \oplus r$. Do đó, kẻ tấn công bây giờ có thể gửi tùy ý $(t^*, r^*)$ các giá trị mà người nhận sẽ chấp nhận. Nhắc lại rằng người xác minh làm như sau

$r' = t' \oplus K$ (chỉ giữ 48 bit cuối cùng); thẩm tra $r = r'$

Chúng tôi thấy rằng kiến ​​​​thức về phần còn lại của khóa là không cần thiết.

Ngoài ra, các giá trị 48 bit cung cấp khả năng bảo vệ va chạm thấp, nhưng điều đó có thể tốt cho ứng dụng của bạn...

phát lại: một cuộc tấn công đơn giản hơn là chơi lại cặp $(r, t)$. Mô tả không cho biết cách người nhận kiểm tra điều này.

Giải pháp tiềm năng: Từ mô tả ban đầu, có vẻ như người nhận khá hạn chế về mặt tính toán và họ chỉ có thể tính toán xors là nhất chứ không phải AES-CTR chẳng hạn. Điều gì sẽ là kỳ lạ với những điều sau đây

vì vậy, có một số loại xác thực trước đã xảy ra nhưng nó không quan trọng ở đây

Dù sao, một giải pháp khả thi là sử dụng hai hàm giả ngẫu nhiên nếu người nhận có thể thực hiện nhiều hơn xors. (Tôi nghi ngờ nó an toàn ...). Ban đầu, mở rộng $K$ vào trong $K_1, K_2, K_3$ có độ dài phù hợp.

Người gửi thực hiện như sau

  1. $ r = $ AES-CTR$(K_1, bộ đếm)$ (giữ 48 bit cuối cùng)
  2. gửi $count, r, \tau = HMAC(K_2, counter,r)$

Người nhận làm như sau

  1. Khi nhận được $r, \tau$, thẩm tra $\tau$
  2. Bộ đếm séc đã tăng lên
  3. làm lại $r$.

Một số nhận xét:

  • Phát sóng ở đây thậm chí không cần thiết nếu người gửi và người nhận là người dùng chung đồng hồ.
  • Giải pháp thay thế có một số vấn đề về độ bền trong trường hợp khởi động lại, như Paul đã chỉ ra trong một nhận xét.
Jimakos avatar
lá cờ cn
Hãy để tôi làm rõ. Cả hai điểm cuối đều có đủ khả năng để thực hiện các thao tác diffie-hellman để lấy được khóa chung này $K$.Ngoài ra, cả hai đều có thể hỗ trợ AES-CTR và AEC-CCMP để mã hóa được xác thực. 48 bit là một yêu cầu của giao thức, vì vậy chúng tôi phải sống với điều đó. Tôi không biết liệu TRNG có khả dụng trong các thiết bị này hay không, vì vậy tôi muốn sử dụng các RNG bảo mật bằng mật mã.
Jimakos avatar
lá cờ cn
Một giải pháp khác mà tôi đang xem xét là: Tạo: m=AES-CTR(randValue, K)â Tính toán::â r, T = AES-CCMP(K, m)â Gửi: :r, Tâ . Điều đó sẽ an toàn hơn? Tuy nhiên, cuối cùng r cần phải là 48 bit.
Jimakos avatar
lá cờ cn
Một lời giải thích khác mà tôi có thể nợ, đó là (a) phát sóng là do thiết kế từ giao thức (b) hai điểm cuối chia sẻ một số loại giá trị bộ đếm thời gian chung cho cả hai đầu
Marc Ilunga avatar
lá cờ tr
@Jimakos, tx để biết thêm thông tin. Tôi muốn nói rằng, nếu cả hai điểm cuối đều có thể thực hiện phép tính tương tự, thì việc sử dụng PRF đã được chứng minh để lấy tính ngẫu nhiên dựa trên một số giá trị duy nhất như dấu thời gian duy nhất sẽ dễ dàng hơn. Và phát một đèn hiệu hoặc dấu thời gian đã nói (điều này xác thực) nếu giao thức bắt buộc
Marc Ilunga avatar
lá cờ tr
Tôi đã không phân tích sâu đề xuất thứ hai nhưng nó có vẻ phức tạp hơn mức cần thiết. Việc sử dụng lại $K$ có vẻ kỳ quặc nhưng có thể hoàn toàn ổn ở đây. Nếu các giá trị đã gửi phải là $(r,T)$. Sau đó, thẻ này có thể được sử dụng cho nonce duy nhất và thẻ xác thực cho $r$. Như đã thảo luận: điều này cung cấp chức năng tuy nhiên bạn cũng có thể muốn xem xét độ bền

Đă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.