Điểm:2

Mã hóa với AES128 (ECB) và Xác thực khóa

lá cờ cn

Trong dự án thử thách mới của tôi, máy chủ của tôi đã từng phát một "củ hành" được tạo thành từ ba lớp được mã hóa bằng AES128 (ECB) - dài 16 byte qua WiFi.

Tôi đang sử dụng Khung báo hiệu WiFi, để chuyển Hành tây qua mạng.

"Củ hành" trông giống như hình bên dưới

nhập mô tả hình ảnh ở đây

Mỗi lớp được mã hóa bằng một khóa khác nhau. Các khóa của mỗi lớp chỉ được biết bởi máy chủ và thiết bị giải mã chúng. Các phím được làm bằng địa chỉ MAC để đơn giản.

  • Lớp đầu tiên luôn là một chuỗi dài 16b ngẫu nhiên, tức là "Xin chào thế giới", được mã hóa bằng thiết bị 1 khóa
  • Lớp thứ hai là lớp đầu tiên được mã hóa bằng khóa thiết bị 2
  • Lớp thứ ba là lớp thứ hai được mã hóa bằng khóa thiết bị 3

Để giải mã đúng cách, lớp quảng bá đầu tiên là 3, vì chúng tôi đang giải mã ngược.

Khi "Onion" được tạo, máy chủ sẽ phát lớp 3 trên Khung báo hiệu WiFi và bất kỳ ai nghe được nó đều có thể thử giải mã dữ liệu nhưng chỉ những thiết bị được chọn mới có thể giải mã đúng cách, vì các lớp được mã hóa bằng khóa của chúng .

Khi mỗi người trong số họ giải mã lớp, nó:

  • cho phép máy chủ biết qua TCP/IP hàm băm của giá trị được giải mã (xác nhận)
  • lấy xuống 'lớp'
  • phát phần còn lại của củ hành qua WiFi (Tạo khung đèn hiệu).

Khi tất cả các lớp được giải mã, công việc đã hoàn thành.

Vấn đề là các thiết bị không có tùy chọn để xác nhận xem quá trình giải mã (khóa được sử dụng) có tốt hay không sau khi giải mã, do đó gây ra nhiều lưu lượng truy cập không cần thiết đến máy chủ với các giá trị băm không chính xác (do giải mã sai).

Câu hỏi

Nên làm gì để cho phép các thiết bị xác thực nếu dữ liệu được giải mã là hợp lệ (do đó, khóa là chính xác)?

Lưu ý bên lề:

ECB đã được sử dụng do tính đơn giản của việc triển khai, các thiết bị tham gia vào quá trình giải mã là các cảm biến năng lượng thấp và mật mã này đã sẵn sàng để sử dụng 'ngay lập tức'.

kelalaka avatar
lá cờ in
Tuy nhiên, Mac-then-encrypt, có vẻ như bạn giới hạn bản thân ở mức 16 byte do đó không thể thực hiện được cho đến lớp cuối cùng.
lá cờ cn
@kelalaka cảm ơn bạn! Tôi cần tối thiểu bao nhiêu (tính bằng byte) để bao gồm MAC trong mỗi lớp?
kelalaka avatar
lá cờ in
Nó phụ thuộc vào loại xác suất bạn muốn. 8 bit 1/64 ....
lá cờ cn
Đã hiểu, tôi có thể tăng tối đa 64b mỗi lớp. Có loại MAC cụ thể nào tôi nên chọn không?
Paul Uszak avatar
lá cờ cn
Bạn sử dụng thuật ngữ WiFi và radio thay thế cho nhau. ĐIỀU NÀY NGUY HIỂM. Truyền vô tuyến được mã hóa là bất hợp pháp ở Vương quốc Anh và Hoa Kỳ và hầu hết các quốc gia khác. Công dân không có quyền riêng tư trên sóng :-(
lá cờ cn
@PaulUszak - Ok, rõ ràng đó là WiFi - tôi không sử dụng bất kỳ thứ gì khác ngoài tiêu chuẩn WiFi và 'Onion' được phát với khung báo hiệu 802.11.
kelalaka avatar
lá cờ in
Nhanh nhất, hãy sử dụng hàm băm BLAKE2? Bạn không cần xác thực, phải không? Chỉ cần sự chính trực là đủ.
lá cờ cn
@kelalaka đúng rồi, tất cả những gì tôi cần là sự chính trực! Cảm ơn bạn rất nhiều vì đầu vào
Điểm:2
lá cờ in

Vì bạn chỉ cần xác thực nên bạn chỉ cần sử dụng hàm băm nhanh như BLAKE2 cho mục đích của mình.

$$ c_0 = E_{k_1}(m_0) $$ sau đó nối thêm hàm băm BLAKE2 64 bit (hoặc hơn) của bản mã

$$m_1 = c_0\mathbin\|BLAKE2(c_0)\mid_{64}$$

$$ c_1 = E_{k_2}(m_1) $$ sau đó nối thêm hàm băm BLAKE2 64 bit (hoặc nhiều hơn) của bản mã

$$m_2 = c_1\mathbin\|BLAKE2(c_1)\mid_{64}$$

$$ c_3 = E_{k_3}(m_2) $$

Bây giờ, phát hành $c_3$. Khi được giải mã, khách hàng có thể kiểm tra hàm băm. Đối với một khóa ngẫu nhiên, nó sẽ có $1/2^{64}$ xác suất để phù hợp với hàm băm được thêm vào. Lưu ý rằng khi $m_2$ không chính xác, hàm băm được thêm vào sẽ không phải là giá trị chính xác, chỉ là một giá trị ngẫu nhiên.

Nếu bạn sử dụng chế độ CBC để mã hóa (mặc dù có vẻ như ECB phù hợp với mục đích của bạn), thì bạn cũng có thể hưởng lợi từ phần đệm (ECB cũng sẽ cần). Chế độ CBC luôn yêu cầu đệm đệm PKCS#7.Nếu tin nhắn không được giải mã chính xác thì phần đệm sẽ thất bại (điều này được sử dụng trong các cuộc tấn công tiên tri đệm). Có dương tính giả, quá. Giống như với xác suất 1/256, phần đệm sẽ đúng cho một khóa không chính xác. Vì vậy, tính toàn vẹn là tốt hơn để tiếp cận để đi.


Ngoài hàm băm, người ta cũng có thể sử dụng nối thêm chuỗi riêng lẻ trên mỗi lớp.

$$ c_0 = E_{k_1}(m_0) $$ sau đó nối thêm $\texttt{Layer1}$ chuỗi. Đó là cách nhanh nhất.

$$m_1 = c_0\mathbin\|\texttt{Layer1}$$

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