Khóa SSH: tại sao id_rsa lớn hơn id_rsa.pub?


8

Khóa riêng của tôi ( ~/.ssh/id_rsa) là tệp 1766 byte, nhưng khóa chung của tôi ( ~/.ssh/id_rsa.pub) chỉ dài 396 byte. Tại sao sự khác biệt lớn? Có phải vì khóa riêng được mã hóa bằng AES? Không phải bản mã AES thường có cùng độ dài với bản rõ?

Câu trả lời:


17

Khóa riêng của bạn có nhiều thông tin hơn khóa công khai của bạn. Trong khi khóa công khai chỉ truyền số mũ mã hóa (e) và mô đun (n), thì khóa riêng còn bao gồm số mũ giải mã (d) và hai thừa số nguyên tố (p và q) của mô đun. Khóa riêng về cơ bản có một khóa công khai bên trong nó.

[Mã hóa: cexttext = tin nhắn ^ e (mod n); Giải mã: message = cexttext ^ d (mod n)]

Để xem tất cả dữ liệu trong tệp khóa riêng của bạn:

$ openssl rsa -in id_rsa -text -noout

Chỉnh sửa: Tệp khóa riêng dường như không có số mũ mã hóa, nhưng nó có số mũ d_1 và d_2, trong đó d_1 = d (mod p-1) và d_2 = d (mod q-1). Chúng được sử dụng để tăng tốc độ giải mã - bạn có thể phân chia lũy thừa giải mã của mình thành các cuộc gọi lũy thừa song song nhỏ hơn, kết thúc nhanh hơn một m = c ^ d (mod n) cho d lớn và n lớn.


2

Thật không may, bạn đã không chỉ định định dạng các khóa được lưu trữ. Tôi đoán bạn đang đề cập đến mã hóa khóa OpenSSH. Trong định dạng này, các khóa được lưu trữ trong các khối dữ liệu được mã hóa base64. Tùy thuộc vào mã hóa khi mã hóa, thường có một số loại đệm liên quan khi mã hóa dữ liệu. Vì vậy, dữ liệu kết quả là bội số của kích thước khối mã hóa.

Các khóa OpenSSH cũng có thể bao gồm một số loại nhận xét và thuộc tính bổ sung được chèn giữa ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ---------END RSA [PUBLIC|PRIVATE] KEY-----các điểm đánh dấu. Xem RFC4716 .

Ngoài ra, đối với khóa chung, mô đun và số mũ công khai được lưu trong khi đối với khóa riêng thì số mũ riêng được lưu. Xem thế hệ khóa RSA trên Wikipedia để biết chi tiết về cơ sở toán học. Có nhiều nơi trên web mô tả kết nối toán học giữa các khóa này. Không chắc chắn nếu bạn cần một bản sao của những lời giải thích ở đây.

Về mặt lý thuyết, có thể tính toán khóa riêng từ thông tin khóa công khai nhưng thực hiện việc này khó khăn hơn nhiều so với cách khác. Chỉ coi khóa riêng là "nguồn" bao gồm tất cả các biến và khóa chung là kết quả của phép tính. Thật dễ dàng để thực hiện tính toán nhiều lần nếu bạn biết tất cả các biến nhưng chỉ biết kết quả thì rất khó để có được tất cả các biến nguồn. Đây cũng là lý do tại sao nó đủ để bạn lưu khóa riêng ở nơi an toàn. Bạn luôn có thể sử dụng khóa riêng để tính lại khóa chung. Nhưng không phải là cách khác - tốt, về mặt lý thuyết bạn có thể làm điều này nhưng tùy thuộc vào độ dài khóa, việc này có thể mất nhiều năm;).


Tính toán khóa riêng từ khóa chung đòi hỏi phải có hệ số hiệu quả nhanh - thiếu trong đó là điều mà bảo mật của mã hóa khóa chung (ít nhất là RSA) dựa vào.
Andrew

Chính xác. Tìm một thuật toán nhân tố nhanh và về cơ bản, bạn phá vỡ tính bảo mật của mã hóa RSA. Ngoài ra, người ta có thể tìm ECC (Mật mã đường cong Elliptic) dựa trên khái niệm về những khó khăn khi đi logarit rời rạc. Tuy nhiên, nếu ai đó tìm thấy giải pháp hiệu quả cho vấn đề này ...
SkyBeam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.