it-swarm-vi.com

SHA, RSA và mối quan hệ giữa chúng

SHA là cơ chế băm. Tuy nhiên, RSA là thuật toán mã hóa.

Vậy thuật toán RSA có sử dụng SHA cơ chế băm để tạo các khóa băm mà lần lượt được sử dụng để mã hóa tin nhắn ??

Hơn nữa, RSA tự cung cấp 2 khóa. Một có thể được giữ công khai và một tư nhân. Bây giờ, các khóa này có thể được sử dụng để mã hóa cũng như giải mã. Tham chiếu: RSA . Vậy thì việc sử dụng SHA trong RSA là gì?

Trong chứng chỉ được cung cấp bởi bất kỳ trang web nào cung cấp bảo mật HTTPS, có một SHA cũng như khóa MD5. Chúng được sản xuất và sử dụng như thế nào trong mã hóa hoặc giải mã dữ liệu được chuyển đến trình duyệt ?

36
whitehat

RSA thực sự là hai thuật toán, một cho mã hóa bất đối xứng và một cho chữ ký số (thuật toán chữ ký theo truyền thống - nhưng không chính xác - được mô tả là "mã hóa với" khóa riêng "và đây là một nguồn gây nhầm lẫn vô tận).

Mã hóa bất đối xứng sử dụng các khóa. Khóa là tham số cho thuật toán; thuật toán tự nó giống nhau đối với mọi người (về mặt phần mềm, nó là tệp thực thi) trong khi các khóa khác nhau giữa những người dùng. Trong a cặp khóa, khóa chung là khóa được sử dụng để mã hóa dữ liệu (chuyển đổi một phần dữ liệu , tức là một chuỗi byte, thành một chuỗi byte khác không thể chấp nhận được đối với mọi người) trong khi khóa riêng là khóa cho phép một người decrypt data ( tức là đảo ngược mã hóa).

Trong khi mã hóa đối xứng , các khóa mã hóa và giải mã giống hệt nhau, nhưng với mã hóa bất đối xứng, khóa mã hóa và giải mã là khác biệt với nhau (do đó tên); chúng được liên kết về mặt toán học với nhau, nhưng điều đó là không khả thi (nghĩa là quá khó để thực hiện với một nhóm máy tính) để khôi phục khóa giải mã từ khóa mã hóa. Đây là lý do tại sao khóa mã hóa có thể được công khai trong khi khóa giải mã được giữ riêng tư: tiết lộ khóa chung không tiết lộ khóa riêng.

Những gì mã hóa bất đối xứng đạt được là không có kỳ tích. Khả năng tiết lộ khóa chung trong khi không nói quá nhiều về khóa riêng, nhưng để cả hai khóa hoạt động cùng nhau (những gì được mã hóa bằng khóa chung có thể được giải mã bằng khóa riêng tương ứng, nhưng không phải cái nào khác), đòi hỏi rất nhiều toán học! RSA đầy toán học. Điều này tương phản với các thuật toán mã hóa đối xứng, đó là những cách "chỉ" để tạo ra một mớ hỗn độn dữ liệu lớn bằng cách trộn các bit lại với nhau.

Mã hóa bất đối xứng là công cụ tự nhiên để sử dụng khi chúng tôi muốn cho phép truyền bí mật giữa bất kỳ hai người dùng nào trong một dân số lớn. Nếu bạn có 1000 người dùng và bạn muốn bất kỳ ai trong hai người dùng có thể trao đổi dữ liệu với nhau mà không cho phép bất kỳ ai theo dõi họ (bao gồm 998 người dùng khác), thì giải pháp cổ điển sẽ là phân phối khóa để mã hóa đối xứng đến mọi cặp của người dùng. Alice và Bob sẽ có một khóa chung đã biết; Alice và Charlie cũng sẽ có một khóa chung (không giống nhau); và Bob và Charlie cũng vậy; và như thế. Mỗi người dùng sẽ cần phải nhớ "khóa chung" của mình với mọi người trong số 999 người dùng khác và bạn sẽ có tổng cộng 499500 khóa. Thêm người dùng thứ 1001 sẽ liên quan đến việc tạo thêm 1000 khóa đối xứng và cung cấp một cho mỗi trong số 1000 người dùng hiện có. Toàn bộ phân phối khóa sớm biến thành một cơn ác mộng không thể sử dụng/không thể thực hiện được. Với mã hóa bất đối xứng, mọi thứ đơn giản hơn nhiều về mặt phân phối khóa: mọi người dùng chỉ cần nhớ khóa riêng của mình; và các khóa công khai (là công khai) có thể được phân phối thông qua một số loại phát sóng (ví dụ: một thư mục).

RSA có một số hạn chế hoạt động. Với biến thể được sử dụng nhiều nhất (biến thể được gọi là PKCS # 1 v1.5 ), nếu kích thước của khóa RSA là "1024 bit" (có nghĩa là thành phần toán học trung tâm của cặp khóa là một Số nguyên 1024 bit), sau đó RSA có thể mã hóa một tin nhắn có độ dài lên tới 117 byte và mang lại một tin nhắn được mã hóa có độ dài 128 byte. Kích thước hạn chế đó và tăng kích thước khi mã hóa là những hậu quả không thể tránh khỏi của cấu trúc toán học của quy trình mã hóa RSA. Do những hạn chế này, chúng tôi thường không mã hóa dữ liệu trực tiếp với RSA; thay vào đó, chúng tôi chọn một chuỗi nhỏ các byte ngẫu nhiên mà chúng tôi gọi là khóa phiên. Chúng tôi mã hóa khóa phiên bằng RSA; và sau đó chúng tôi sử dụng khóa phiên với a đối xứng thuật toán mã hóa để xử lý toàn bộ tin nhắn. Điều này được gọi là mã hóa lai .


SHA là tên chung cho một họ hàm băm mật mã . Thành viên đầu tiên của gia đình đó được mô tả dưới cái tên 'SHA' nhưng đã sớm bị từ chối sau khi một điểm yếu nghiêm trọng được tìm thấy trong đó; một phiên bản cố định đã được xuất bản dưới tên SHA-1 (phiên bản yếu được gọi là SHA-0). Bốn chức năng mới giống như SHA đã được thêm vào gia đình sau này (SHA-224, SHA-256, SHA-384SHA-512: được gọi chung là 'SHA-2').

Hàm băm không có khóa. Hàm băm là một thuật toán thực thi là mã thuần. Có một SHA-1 và mọi người đều sử dụng như nhau.

Các hàm băm "chỉ" tạo ra một mớ hỗn độn lớn của dữ liệu đầu vào, điều này không có nghĩa là sẽ làm sáng tỏ. Trên thực tế, nó có nghĩa là kiên cường để làm sáng tỏ. Mặc dù mọi người đều biết tất cả những gì cần biết về hàm băm (không có khóa, chỉ có mã và không có gì là bí mật), nhưng nó vẫn tỏ ra "quá khó" để tính toán lại một thông điệp đầu vào phù hợp, được đưa ra hàm băm đầu ra. Thậm chí không thể tìm thấy hai thông báo đầu vào riêng biệt, khi được cung cấp cho hàm băm, mang lại cùng một đầu ra; there must tồn tại các cặp thông báo như vậy - được gọi là va chạm - vì đầu ra hàm băm có kích thước nhỏ cố định, trong khi đầu vào được chấp nhận có thể lớn hơn nhiều, do đó, có nhiều đầu vào có thể hơn đầu ra có thể. Một sự chắc chắn về mặt toán học là sự va chạm tồn tại cho mọi hàm băm, nhưng thực sự tìm thấy một hàm là một vấn đề khác.

Một hàm băm, như chính nó, không làm bất cứ điều gì có giá trị cao ngay lập tức, nhưng nó là một khối xây dựng rất quan trọng cho các thuật toán khác. Chẳng hạn, chúng được sử dụng với chữ ký số . Chữ ký số "chứng minh" hành động có ý thức của người ký được chỉ định đối với một phần dữ liệu; như mã hóa bất đối xứng, điều này liên quan đến các cặp khóa và toán học, và các ràng buộc liên quan đến dữ liệu đã ký. Hàm băm h sao cho việc ký h (m) cũng tốt như ký m chính nó: vì nó là không thể tìm thấy hai thông điệp riêng biệt băm đến cùng một giá trị, sự chấp thuận của đầu ra băm là đủ tốt. Vấn đề là output của hàm băm đủ nhỏ để có thể sử dụng được với toán học ẩn trong thuật toán chữ ký, ngay cả khi chính thông điệp đó lớn (SHA-1 có thể xử lý hàng gigabyte dữ liệu và mang lại một đầu ra 20 byte).

Có thể lưu ý rằng một số biến thể gần đây của thuật toán mã hóa RSA (với 'phần đệm OAEP' từ PKCS # 1 v2.0) bên trong sử dụng các hàm băm. Các hàm băm là "ngẫu nhiên" tốt (đầu ra của hàm băm không thể hiện cấu trúc dễ nhận biết) và điều này làm cho chúng thích hợp để xây dựng các thuật toán mã hóa phức tạp hơn với các tính năng bảo mật tốt.


Trong SSL/TLS (HTTPS chỉ là HTTP-trong-a-SSL/TLS-đường hầm), các hàm băm được sử dụng cho một số thứ:

  • như một phần của mã hóa bất đối xứng và/hoặc chữ ký số;
  • là một phần của HMAC để cho phép máy khách và máy chủ xác minh rằng dữ liệu trao đổi không bị thay đổi trong quá trình;
  • như một viên gạch xây dựng cho Hàm dẫn xuất khóa , "mở rộng" một khóa phiên đã cho thành một số khóa đối xứng được sử dụng để mã hóa đối xứng và kiểm tra tính toàn vẹn theo cả hai hướng của đường hầm.

KDF dựa vào "ngẫu nhiên hóa" và không thể đảo ngược của hàm băm. Trong SSL/TLS lên đến TLS 1.1, KDF được xây dựng qua hai hàm băm, MD5 và SHA-1, trong nỗ lực làm cho nó mạnh mẽ ngay cả khi sau đó đã tìm thấy điểm yếu trong MD5 hoặc SHA-1. Hóa ra, điểm yếu đã được tìm thấy trong cả hai, nhưng nó không cho phép bất kỳ sự phá vỡ nào trên KDF như được sử dụng trong SSL/TLS. Tuy nhiên, TLS 1.2 đã chuyển sang một KDF khác sử dụng hàm băm duy nhất có thể định cấu hình, thường là SHA-256, hiện không có điểm yếu nào được biết đến.

51
Thomas Pornin

SHA không được sử dụng trong RSA.

Tuy nhiên, các giao thức mã hóa như SSL, SSH và các giao thức khác, sử dụng các thuật toán khác nhau như SHA và RSA cho các mục đích khác nhau. SSL sử dụng RSA (mã hóa) hoặc DH (với chữ ký RSA, DSA hoặc ECDSA) cho khóa đàm phán và AES hoặc 3DES để mã hóa dữ liệu. Trong định dạng tệp/giao thức PGP, RSA, DSA và ElGamal được sử dụng để ký và mã hóa.

4
chris

Như bạn đã lưu ý, chúng là hai thứ khác nhau. Hash (SHA) là để đảm bảo tính toàn vẹn dữ liệu và mã hóa (RSA) là bảo mật dữ liệu. Chúng được sử dụng kết hợp để đảm bảo dữ liệu không bị ảnh hưởng và chỉ có bên phù hợp mới có thể đọc được.

HTTPS là một hình thức PKI, cung cấp tính toàn vẹn, bảo mật, xác thực. SHA hoặc MD5 chỉ là hai thuật toán băm khác nhau được sử dụng để đảm bảo tính toàn vẹn của các kết nối https.

0
breakingigloo

Tất nhiên, có thể SHA được sử dụng để xây dựng PRNG (trình tạo số ngẫu nhiên giả) để tạo các khóa RSA. Nhưng có thể sử dụng các nguyên hàm tiền điện tử khác (ví dụ AES) cũng vậy. Đối với điều này PRNG có các thông số kỹ thuật đặc biệt (NIS SP 800-90, ANSI X9.31). RSA "thuần túy" Không quan tâm đến cách tạo khóa, nhưng để áp dụng RSA trong ứng dụng trong thế giới thực, chúng ta phải chắc chắn rằng khóa được tạo phải được tạo bởi một quá trình ngẫu nhiên thực sự (hoặc dường như được tạo bởi). Nếu không thì đối với kẻ tấn công, thật dễ dàng để đoán xem các khóa là gì (Nếu keays không ngẫu nhiên thì kẻ tấn công cũng có thể tính toán được).

0
user536

RSA là một thuật toán mã hóa bất đối xứng, chúng được sử dụng để gửi thông tin đến một bên cụ thể mà không cần chính bạn có thể giải mã lại. Nhưng vẫn có thể được giải mã bởi người khác. Các thuật toán này rất chậm, và vì vậy chỉ muốn được sử dụng trên một lượng nhỏ dữ liệu.

SHA là một bộ thuật toán băm mật mã, đây là một đại diện nhỏ hơn của một khối dữ liệu lớn, vì mục đích mã hóa, chúng tôi muốn điều này đáp ứng yêu cầu rằng không thể tìm thấy một tập hợp dữ liệu sao cho khớp với hàm băm nhất định (trong những từ khác bạn không thể chuyển từ hàm băm sang dữ liệu tạo ra hàm băm đó (cho dù cùng một dữ liệu hay không).

Cuối cùng, có các thuật toán như AES, chúng được sử dụng trong mật mã đối xứng, trong đó cả hai bên có cùng một khóa và có thể cả mã hóa và giải mã với cùng một khóa.

Về cơ bản, chúng tôi kết hợp những thứ khác nhau này theo nhiều cách khác nhau: Vì vậy, chúng tôi sẽ sử dụng RSA để gửi và đồng ý về một bộ khóa đối xứng (AES) (chỉ cho một phiên), theo cách này, không ai khác có thể giải mã dữ liệu của chúng tôi trừ người khác cá nhân vì họ không thể nắm giữ các khóa đối xứng và chúng tôi không thực hiện mã hóa bất đối xứng chậm trên tất cả dữ liệu mà chỉ là một khóa mã hóa đối xứng tương đối nhỏ.

Băm thường được sử dụng trong các hệ thống như vậy theo cách sau, chúng tôi muốn kiểm tra dữ liệu đến từ người khác, vì vậy anh ta giải mã văn bản đơn giản bằng khóa riêng của mình, nếu chúng tôi mã hóa văn bản mã hóa này, chúng tôi sẽ lấy lại dữ liệu ( về cơ bản nghĩ về mã hóa là nghịch đảo của giải mã và điều này đột nhiên có ý nghĩa!), tuy nhiên như tôi đã nói trước đó, mật mã bất đối xứng là chậm. Vì vậy, tại sao không băm dữ liệu và ký băm theo cách này chúng ta có thể xác minh tính toàn vẹn của dữ liệu mà không cần ai đó có thể tạo dữ liệu có vẻ khớp.

0
ewanm89