Có vẻ như chúng đều là các thuật toán mã hóa yêu cầu khóa công khai và khóa riêng. Tại sao tôi chọn cái này so với cái kia để cung cấp mã hóa trong ứng dụng máy chủ khách hàng của mình?
Có vẻ như chúng đều là các thuật toán mã hóa yêu cầu khóa công khai và khóa riêng. Tại sao tôi chọn cái này so với cái kia để cung cấp mã hóa trong ứng dụng máy chủ khách hàng của mình?
Câu trả lời:
RSA
Mã hóa và giải mã RSA có tính chất giao hoán
do đó nó có thể được sử dụng trực tiếp như một lược đồ chữ ký số
được đưa ra một lược đồ RSA {(e, R), (d, p, q)}
để ký một thông điệp M, tính:
S = M power d (mod R)
để xác minh chữ ký, tính:
M = S power e (mod R) = M power ed (mod R) = M (mod R)
RSA có thể được sử dụng cho cả mã hóa và chữ ký điện tử,
đơn giản bằng cách đảo ngược thứ tự sử dụng số mũ: số mũ bí mật (d) để tạo chữ ký, số mũ công khai (e) để bất kỳ ai xác minh chữ ký. Mọi thứ khác đều giống hệt nhau.
DSA (Thuật toán chữ ký số)
DSA là một biến thể của thuật toán ElGamal và Schnorr tạo ra chữ ký 320 bit, nhưng với tính bảo mật 512-1024 bit lại phụ thuộc vào độ khó tính toán logarit rời rạc đã được chấp nhận khá rộng rãi
DSA Key Generation
lần đầu tiên được chia sẻ công khai toàn cầu các giá trị khóa (p, q, g) được chọn:
chọn số nguyên tố lớn p = 2 lũy thừa L
trong đó L = 512 đến 1024 bit và là bội số của 64
chọn q, hệ số nguyên tố 160 bit của p-1
chọn g = h power (p-1) / q
cho bất kỳ h1 nào
sau đó mỗi người dùng chọn một khóa riêng và tính khóa công khai của họ:
chọn x tính y = g power x (mod p)
Thế hệ khóa DSA có liên quan đến, nhưng hơi phức tạp hơn El Gamal. Chủ yếu là do việc sử dụng mô-đun 160-bit thứ cấp q được sử dụng để giúp tăng tốc độ tính toán và giảm kích thước của chữ ký kết quả.
Tạo và Xác minh Chữ ký DSA
để ký một tin nhắn M
tạo khóa chữ ký ngẫu nhiên k, k tính
r = (g power k (mod p)) (mod q)
s = k-1.SHA (M) + xr (mod q)
gửi chữ ký (r, s) với thông báo
xác minh chữ ký, tính:
w = s-1 (mod q)
u1 = (SHA (M) .w) (mod q)
u2 = rw (mod q)
v = (g power u1.y power u2 (mod p)) (mod q)
nếu v = r thì chữ ký được xác minh
Tạo chữ ký một lần nữa tương tự như ElGamal với việc sử dụng khóa chữ ký tạm thời k trên mỗi tin nhắn, nhưng thực hiện calc mod p trước, sau đó mod q để giảm kích thước của kết quả. Lưu ý rằng việc sử dụng hàm băm SHA là rõ ràng ở đây. Việc xác minh cũng bao gồm việc so sánh hai phép tính, một lần nữa phức tạp hơn một chút, nhưng có liên quan đến El Gamal.
Lưu ý rằng gần như tất cả các phép tính là mod q, và do đó nhanh hơn nhiều.
Tuy nhiên, ngược lại với RSA, DSA chỉ có thể được sử dụng cho chữ ký điện tử
Bảo mật DSA
Sự hiện diện của kênh danh nghĩa tồn tại trong nhiều sơ đồ (bất kỳ sơ đồ nào cần một số ngẫu nhiên để được chọn), không chỉ DSA. Nó nhấn mạnh sự cần thiết của "bảo mật hệ thống", không chỉ là một thuật toán tốt.
Kiểm tra câu trả lời của AVA bên dưới .
Câu trả lời cũ của tôi có vẻ sai
Với tham chiếu tới man ssh-keygen
, độ dài của khóa DSA được giới hạn ở chính xác 1024 bit để duy trì tuân thủ FIPS 186-2 của NIST. Tuy nhiên, về mặt lý thuyết, các khóa DSA dài hơn là có thể; FIPS 186-3 cho phép chúng một cách rõ ràng. Hơn nữa, bảo mật không còn được đảm bảo với các khóa RSA hoặc DSA dài 1024 bit.
Kết luận, khóa RSA 2048 bit hiện là lựa chọn tốt nhất.
Việc thiết lập một kết nối SSH an toàn đòi hỏi nhiều hơn là lựa chọn công nghệ cặp khóa mã hóa an toàn. Theo quan điểm của tiết lộ NSA của Edward Snowden, người ta thậm chí phải thận trọng hơn những gì trước đây được cho là đủ.
Để nêu tên một ví dụ, sử dụng thuật toán trao đổi khóa an toàn cũng quan trọng không kém. Dưới đây là tổng quan tốt đẹp về các phương pháp làm cứng SSH tốt nhất hiện nay .
ssh-keygen
cho phép các khóa có kích thước bit khác (bản thân tôi sử dụng khóa DSA 2048 bit được tạo bằng cách sử dụng ssh-keygen
RHEL).