thuật toán trao đổi khóa ở đâu?
Các crypto_box
chỉ đơn giản là crypto_box_curve25519xsalsa20poly1305
và nó có hai phần;
Phần 1: Tính toán trước độc lập gói tin;
Bữa tiệc $A$ có khóa bí mật 32 byte $sk_A$ và khóa công khai $pk_A$ ở đâu $pk_A = [sk_A]G$
Bữa tiệc $B$ có khóa bí mật 32 byte $sk_B$ và khóa công khai $pk_B$ ở đâu $pk_B = [sk_B]G$ và $G$ là điểm cơ bản của X25519.
đây $[a]G$ là phép nhân vô hướng và nó có nghĩa là thêm $G$ với chính nó $a$-lần.
Bữa tiệc $A$ sử dụng $sk_A$ và $pk_B$ để lấy khóa bằng X25519;
$$k = Hash(x([sk_A]pk_B))$$ lưu ý rằng $pk_B$ là một điểm trên đường cong và X25519 chỉ sử dụng $x$ tọa độ của các điểm cho ECDH ( lưu ý với $x(\cdot)$.
Như bạn có thể thấy, một lần $A$ có thể lấy khóa công khai của $B$ chìa khóa $k$ có thể được xây dựng ngay lập tức và nó tương tự cho $B$, quá. Đây là Trao đổi khóa Elliptic Curve Diffie-Hellman (ECDH).
Phần 2: tính toán trên mỗi gói
- $A$ chọn nonce 24 byte $n$ ( phải là duy nhất ) và sẽ không bao giờ lặp lại trong khi giao tiếp với $B$. Nonce 24 byte an toàn để tạo ngẫu nhiên.
- $A$ mở rộng khóa $k$ với nonce thành một dòng khóa với
xsalsa20
- Tin nhắn được mã hóa bằng luồng (chỉ x-or) trong đó 32 byte đầu tiên được dành riêng.
- 32 byte đầu tiên được sử dụng để xác thực tin nhắn được mã hóa với
Poly1305
.
tại sao họ cần thuật toán trao đổi khóa
Nếu họ không có cơ chế trao đổi khóa thì họ cần một cơ chế phân phối khóa đối xứng đó là gánh nặng của mã hóa đối xứng trước khi mã hóa khóa công khai được phát minh.
Các khóa công khai cần xác minh. Đôi khi chúng được sử dụng như TOFU (Tin tưởng vào lần sử dụng đầu tiên) và sau đó được xác minh bằng một số cơ chế như Signal. Trong một số giao tiếp an toàn hơn, trước tiên hãy xác minh các khóa chung.
Để biết thêm chi tiết đọc