Đề xuất nhằm vào 1/2/3/4 của phần cuối cùng của câu hỏi: mã hóa kết hợp chuỗi.
chúng tôi sẽ sử dụng
- Sơ đồ mã hóa xác thực đối xứng nhanh, chẳng hạn như AES-GCM hoặc ChaCha20-Poly1305 với khóa bí mật 256 bit, mã hóa bằng khóa $K$ lưu ý $C=E_K(M)$ và giải mã $M=D_K(C)$.
- Sơ đồ mã hóa bất đối xứng có khả năng mã hóa tin nhắn 256 bit, với mã hóa được ghi chú $C=\mathcal E_P(M)$ và giải mã $M=\mathcal D_S(C)$, ở đâu $(P,S)$ là một cặp khóa (công khai, riêng tư/bí mật). RSAES-OAEP hoặc ECIES sẽ làm.
Chúng tôi giả sử Bob và Carol đã tạo các cặp khóa $(P_B,S_B)$ và $(P_C,S_C)$, và truyền khóa công khai $P_B$ và $P_C$ cho Alice theo cách đảm bảo tính toàn vẹn và bằng chứng về nguồn gốc (có lẽ bằng chứng chỉ kỹ thuật số).
Để mã hóa cho Carol bằng proxy của Bob, Alice
- rút ra hai khóa 256 bit ngẫu nhiên $K_B$ và $K_C$
- tính toán $C_B=\mathcal E_{P_B}(K_B)$
- tính toán $C_C=\mathcal E_{P_C}(K_C)$
- tính toán $C_0=E_{K_B}(C_C)$
- tính toán $C_1=E_{K_C}(M)$
- gửi cho Bob tin nhắn $C=C_B\mathbin\|C_0\mathbin\|C_1$.
Bob nhận và lưu trữ $C$. Khi Carol yêu cầu tin nhắn được mã hóa, Bob
- chiết xuất $C_B$, $C_0$ và $C_1$ từ $C$
- tính toán $K_B=\mathcal D_{S_B}(C_B)$
- tính toán $C_C=D_{K_B}(C_0)$
- biểu mẫu và gửi cho Carol $C'=C_C\mathbin\|C_1$.
Carol được $C'$ và
- chiết xuất $C_C$ và $C_1$ từ $C'$
- tính toán $K_C=\mathcal D_{S_C}(C_C)$
- tính toán $M=D_{K_C}(C_1)$
Bất cứ khi nào giải mã không thành công, Bob hoặc Carol sẽ hủy bỏ.
Lưu ý rằng tin nhắn hàng loạt $M$ chỉ được mã hóa một lần, đáp ứng yêu cầu về hiệu suất.
Chúng ta có thể thay thế sơ đồ mã hóa bất đối xứng bằng sơ đồ mã hóa đối xứng, $(P_B,S_B)$ với câu hỏi $K_2$ và $(P_C,S_C)$ với câu hỏi $K_3$ (và sau đó, hệ thống có thể được đơn giản hóa để loại bỏ $K_B$). Nhưng bằng cách đối xứng, chúng ta mất đi lợi ích của mật mã bất đối xứng: rằng Alice không cần giữ bí mật bất cứ điều gì và không thể sử dụng bí mật đó để thử giải mã thông tin liên lạc khác được gửi tới Bob hoặc Carol.