Có thể mã hóa dữ liệu để nó có thể được giải mã bằng nhiều khóa khác nhau không?
Thí dụ:
Tôi đã mã hóa dữ liệu bằng key1, nhưng tôi muốn có thể giải mã bằng các khóa 2, 3 và 4.
Điều này có khả thi không?
Có thể mã hóa dữ liệu để nó có thể được giải mã bằng nhiều khóa khác nhau không?
Thí dụ:
Tôi đã mã hóa dữ liệu bằng key1, nhưng tôi muốn có thể giải mã bằng các khóa 2, 3 và 4.
Điều này có khả thi không?
Câu trả lời:
GnuPG thực hiện mã hóa đa khóa theo tiêu chuẩn.
Lệnh sau sẽ mã hóa doc.txt
bằng khóa công khai cho Alice và khóa công khai cho Bob. Alice có thể giải mã bằng khóa riêng của mình. Bob cũng có thể giải mã bằng khóa riêng của mình.
gpg --encrypt --recipient alice@example.com \
--recipient bob@example.com doc.txt
Tính năng này được trình bày chi tiết trong phần hướng dẫn sử dụng có tên " Mã hóa và giải mã tài liệu "
Có thể mã hóa cho nhiều người nhận. Cũng có vẻ hợp lý khi bạn nghĩ rằng bạn có thể muốn đọc những gì bạn đã gửi cho ai đó và để làm như vậy, bạn cần phải có trong danh sách người nhận.
Đây là cách thực hiện thông qua gpg
dòng lệnh (như được mô tả trong câu trả lời của David Segonds ):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
GUI của bạn phải cung cấp cách mã hóa cho nhiều người
Có một câu hỏi về Bảo mật thông tin , Kích thước tệp GPG với nhiều người nhận? , giải thích cơ chế mã hóa :
GPG mã hóa tệp một lần bằng khóa đối xứng, sau đó đặt tiêu đề xác định cặp khóa đích và phiên bản mã hóa của khóa đối xứng.
[...] Khi được mã hóa cho nhiều người nhận, tiêu đề này được đặt nhiều lần cung cấp một phiên bản mã hóa duy nhất của cùng một khóa đối xứng cho mỗi người nhận .
Các máy khách GnuPG và PGP nói chung thường mã hóa dữ liệu thực tế bằng một khóa đối xứng được gọi là "khóa phiên". Khóa phiên sau đó được mã hóa với mỗi "khóa người nhận" (tức là những khóa bạn chỉ định với -r / - người nhận). Điều này đôi khi được gọi là mật mã lai . Ngay bây giờ, tôi tin rằng GnuPG theo mặc định sử dụng khóa phiên 256 bit và AES để mã hóa dữ liệu bản rõ thành khóa phiên AES-256 đó và khóa người nhận là RSA / DSA / ECDSA / v.v. của bạn. khóa assymetric trong trường hợp này.
Một lý do để làm theo cách này là các thuật toán mật mã đối xứng như AES thường nhanh hơn nhiều so với các thuật toán bất đối xứng như RSA. Vì vậy, GnuPG chỉ phải mã hóa ~ 256 bit (khóa phiên) bằng RSA và có thể sử dụng AES để mã hóa dữ liệu (lớn tùy thích!) Với khóa phiên đó. Máy của Intel thậm chí còn có hướng dẫn tích hợp, AES-NI , để thực hiện một số bước của thuật toán trong phần cứng, điều này làm cho GnuPG cực kỳ linh hoạt trong việc mã hóa / giải mã dữ liệu.
Một lý do khác để làm theo cách này là nó cho phép các tài liệu được mã hóa bằng PGP được mã hóa cho nhiều bên mà không cần phải tăng gấp đôi kích thước của tài liệu. Lưu ý rằng khi bạn chỉ định nhiều người nhận cho một tài liệu được mã hóa (ví dụ:gpg -ea -r Alice -r Bob -o ciphertext.asc
), tài liệu được mã hóa được lưu trữ (ciphertext.asc) không lớn gấp 2 lần như thể bạn vừa mã hóa nó cho Alice.
Xem thêm --show-session-key
thông số trong trang người dùng gpg để có thể chỉ giải mã khóa phiên, chẳng hạn như để cho phép bên thứ ba giải mã tài liệu đã được mã hóa cho bạn mà không cần phải chuyển cho họ khóa cá nhân hoặc dữ liệu bản rõ.
Vâng nó có thể. Google "mã hóa nhiều bên" để bắt đầu.
AFAIK, không có thả chúng vào và sử dụng các gói cho nó.
- MarkusQ
Tái bút: Để có bản phác thảo về cách nó có thể được thực hiện, hãy xem xét điều này. Thông điệp được mã hóa bao gồm:
Người nhận giữ chìa khóa, tôi chỉ cần giải mã bản sao của pad bằng chìa khóa của họ, sau đó giải mã tải trọng.
Tuy nhiên, đây chỉ là một bằng chứng cho thấy nó có thể được thực hiện và sẽ hút như một thực hiện thực tế. Nếu có thể, bạn nên tránh sử dụng mã hóa của riêng mình. Nếu bạn không hiểu tại sao, bạn chắc chắn nên tránh sử dụng mã hóa của riêng mình.
-----Biên tập ------------
Nếu tôi sai và các công cụ Gnu làm được điều đó, hãy sử dụng chúng. Nhưng tôi dường như không thể tìm thấy bất kỳ thông tin nào về cách làm điều đó.
Nhiều (hơn hai) RSA khóa có thể giống như thế này - tôi không phải là nhà toán học, vì vậy thuật toán này không nhất thiết phải an toàn, tôi chỉ muốn đưa ra ý tưởng về nó.
m = p * q * r; p, q, r là các số nguyên tố lớn
fi (m) = (p-1) (q-1) (r-1)
d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei là các số tùy ý, d được tính để hoàn thành phương trình
y1 == x ^ e1 (mod m)
y2 == y1 ^ e2 (mod m)
y3 == y2 ^ e3 (mod m)
...
x == yi ^ d (mod m)
Ví dụ, thuật toán này có thể được sử dụng để tăng tốc độ của Bộ định tuyến Onion.