Hệ mã hóa RSA và chữ ký số

Nội dung bài viết gốc: https://manhhomienbienthuy.github.io/2017/02/20/he-ma-hoa-rsa-va-chu-ky-so.html (đã xin phép tác giả )

Trong nội dung bài viết trước mọi người đã tìm hiểu về HTTPS và SSL Certificate. Trong số đó, mọi người đã biết rằng SSL Certificate luôn phải được xác thực bằng chữ ký số. Thực ra, không chỉ là trong SSL Certificate, chữ ký số là một technology rất quan trọng và được tận dụng trong rất nhiều nghành nghề dịch vụ không giống nhau. Trong nội dung bài viết này, mọi người sẽ tìm hiểu kỹ hơn về chữ ký số, cách tạo cũng như xác thực chúng.

Hệ mã hóa bất đối xứng (asymmetric cryptography) hay còn gọi là hệ mã hóa public key là một hệ mã hóa tận dụng một cặp key để mã hóa và giải thuật: public key (khóa công khai minh bạch) dùng để làm mã hóa và private key (khóa kín đáo) để giải thuật.

Trong hệ mã hóa này, bất kể ai cũng rất có thể tận dụng public key đã mã hóa phiên bản tin và gửi cho những người nhận. Nhưng một điều hiển nhiên là người sở hữu private key sẽ lưu lại nó cho riêng mình, và do đó, chỉ anh ta mới có giải thuật được mà thôi.

Thường thì thì cặp khóa được sinh này sẽ nỗ lực đảm nói rằng từ public key rất khó (gần như thể không thể) truy ra được private key. Vì vậy, bất kể kẻ tiến công nào nếu đã đoạt public key (điều này khá đơn giản và dễ dàng) cũng không thể đã đoạt private key để giải thuật.

Tuy nhiên, thực tiễn phũ phàng hơn rất nhiều. Trọn vẹn không hề có thuật toán nào đạt được lý tưởng như trên. Những thuật toán sinh khóa hiện nay đều chỉ rất có thể phòng chống những kỹ thuật crack thường thì tận dụng máy tính cá thể. Với sự phát triển của những siêu máy tính cũng như những loại máy tính lượng tử, hệ mã hóa bất đối xứng cũng đang phải đương đầu với rất nhiều thử thách.

Chữ ký số là một dạng của chữ ký điện tử. Nó là một dạng tài liệu dùng để làm xác nhận cho những tài liệu khác. Việc xác nhận ra mắt ra sao mọi người sẽ tìm hiểu ở phần tiếp theo.

Chữ ký số tận dụng một hệ mã hóa bất đối xứng. Trong phần lớn những trường hợp, nó còn rất có thể kiểm tra cả tính toàn vẹn của tài liệu nữa. Chữ ký số tương tự như chữ ký tay trên nhiều phương diện, nhưng việc thiết lập và tận dụng chữ ký số khó khăn hơn rất nhiều.

Trong phần tiếp theo, mọi người sẽ cùng tìm hiểu chữ ký số tận dụng hệ mã hóa bất đối xứng rất kinh điển là RSA.

RSA là một hệ mã hóa bất đối xứng được phát triển bởi Ron Rivest, Adi Shamir và Leonard Adleman (tên của nó cũng đó là tên viết tắt của 3 tác giả này) và được tận dụng thoáng rộng trong công việc mã hoá và technology chữ ký điện tử. Trong hệ mã hóa này, public key rất có thể share công khai minh bạch cho toàn bộ mọi người. Sinh hoạt của RSA dựa trên 4 bước chính: sinh khóa, share key, mã hóa và giải thuật.

Mấu chốt cơ phiên bản của việc sinh khóa trong RSA là tìm được bộ 3 số tự nhiên e, d và n sao cho:

và một điểm không thể bỏ qua là cần bảo mật thông tin cho d sao mặc dù biết e, n hay thậm chí còn cả m cũng không thể tìm ra d được.

Ví dụ, khóa của RSA được sinh như sau:

  • Chọn 2 số nhân tố p và q
  • Tính n = pq. Sau này, n sẽ được sử dụng làm modulus trong cả public key và private key.
  • Tính một trong những giả nhân tố bằng phi hàm Carmichael như sau: λ(n) = BCNN(λ(p), λ(q)) = BCNN(p − 1, q − 1). Giá trị này sẽ tiến hành giữ kín đáo.
  • Chọn một trong những tự nhiên e trong khoảng chừng (1, λ(n)) sao cho ƯCLN(e, λ(n)) = 1, tức là e và λ(n) nhân tố cùng nhau.
  • Tính toán số d sao cho d ≡ 1/e (mod λ(n)) hay viết dễ hiểu hơn thì de ≡ 1 (mod λ(n)). Số d được gọi là số nghịch đảo modulo của e (theo modulo mod λ(n)).

Public key sẽ là bộ số (n, e), và private key sẽ là bộ số (n, d). Mọi người cần giữ private key thật cẩn trọng cũng như những số nhân tố p và q vì từ đó rất có thể tính toán những khóa rất đơn giản và dễ dàng.

Trong thực hiện, mọi người thường chọn e tương đối nhỏ để việc mã hóa và giải thuật nhanh gọn hơn. Giá trị thường được tận dụng là e = 65537. Ngoài ra, mọi người rất có thể tính số giả nhân tố bằng phi hàm Euler φ(n) = (p − 1)(q − 1) và dùng nó như λ(n). Vì φ(n) là bội của λ(n) nên những số d thỏa mãn nhu cầu de ≡ 1 (mod φ(n)) cũng sẽ thỏa mãn nhu cầu d ≡ 1/e (mod λ(n)). Tuy nhiên, một trong những tác dụng phụ của việc này là d thường sẽ trở thành to hơn mức quan trọng.

Mã hóa và giải thuật

Trong phần này, mọi người sẽ tìm hiểu cách mã hóa với public key (n, e) và giải thuật với private key (n, d).

Nếu mọi người có phiên bản rõ M, mọi người cần chuyển nó thành một trong những tự nhiên m trong khoảng chừng (0, n) sao cho m, n nhân tố cùng nhau. Việc này rất đơn giản và dễ dàng triển khai bằng phương pháp thêm một những kỹ thuật padding. Tiếp theo, mọi người sẽ má hóa m, thành c như sau:

Tiếp theo giá trị c sẽ tiến hành chuyển cho những người nhận.

Ở phía người nhận, họ sẽ giải thuật từ c để lấy được m như sau:

Từ m rất có thể lấy lại được phiên bản tin bằng phương pháp đảo ngược padding

Mọi người lấy một ví dụ giản dị và đơn giản như sau:

p = 5, q = 7 => n = pq = 35 => φ(n) = 24

Mọi người chọn e = 5 vì ƯCLN(5, 24) = 1, sau cùng chọn d = 29 vì ed – 1 = 29×5 – 1 chia hết cho 24.

Giả sử m = 32 (dấu cách), mọi người sẽ mã hóa m và thu được

c = 32 ^ 5 % 35 = 2

Lời giải c để thu được m

m = 2 ^ 29 % 35 = 32

Đây đó là m lúc đầu. Bạn cũng có thể thứ m với những giá trị không giống nhau để thấy thuật toán trọn vẹn đúng đắn. Tất nhiên rồi, nó đã được chứng tỏ mà. Việc chứng tỏ RSA sinh hoạt và đúng là một vấn đề toán học khá phức tạp mà nội dung bài viết này sẽ không còn đi vào cụ thể của nó.

Mức độ bảo mật thông tin của RSA phụ thuộc rất rộng lớn vào kỹ năng phân tích thừa số nhân tố của những số lớn. Cũng chính vì mọi người cung ứng public một kiểu thoáng rộng, nếu việc phân tích thừa số nhân tố giản dị và đơn giản, thì việc bị lộ private là không thể tránh khỏi.

Vì vậy, khi sinh khóa, mọi người cần chọn những số nhân tố p và q một kiểu tình cờ. Bạn dạng thân hai số nhân tố này cũng rất rộng lớn, và để việc phân tích thừa số nhân tố khó khăn hơn, hai số nhân tố này sẽ không hề có cùng khoảng cách. Trong tương lai gần, có nhẽ vẫn chưa xuất hiện một phương pháp hiệu suất cao nào được chấp nhận triển khai điều này với những máy tính cá thể.

Tuy nhiên, với sự phát triển của technology, những siêu máy tính xuất hiện ngày càng nhiều. Cùng với mọi người máy tính lượng tử được chấp nhận tính toán với vận tốc cao hơn nữa rất nhiều rất có thể sẽ phá vỡ sự bảo mật thông tin của RSA.

Ngày từ thời điểm năm 1993, thuật toán Shor đã được phát triển và chỉ ra rằng máy tính lượng tử rất có thể giải bài toán phân tích ra thừa số trong thời hạn đa thức. Rất may là những điều này mới chỉ là lý thuyết vì đến thời khắc ngày nay và trong vài năm tới, máy tính lượng tử vẫn chưa hoàn thiện.

Một thắc mắc khá thú vị là rất có thể đảo vai trò của public key và private key hay là không? Tức là mọi người dùng private key để mã hóa và dùng public key để giải thuật hay là không? Lời đáp là có. Tuy nhiên, không có bất kì ai làm như vậy cả vì rất giản dị và đơn giản: từ public key rất khó để suy ra private key nhưng từ private để suy ra public thì rất giản dị và đơn giản. Nếu cho những người khác private key (để họ mã hóa), những kẻ tiến công man in the middle sẽ đơn giản và dễ dàng tính toán được public và thay đổi trọn vẹn cuộc hội thoại của mọi người. Như vậy thì nguy hiển quá.

Tuy nhiên, có một trường hợp mọi người đã đảo vai trò của private key và public key như vậy. Đó đó là khi mọi người tận dụng chữ ký số.

Việc ký tên và xác thực chữ ký số tận dụng hệ mã hóa RSA tương tự như quy trình mã hóa mà giải thuật ở trên. Tuy nhiên vai trò của public key và private thì có thay đổi đôi chút.

Để tạo chữ ký, người gửi sẽ dùng private key và người nhận sẽ dùng public key để xác thực chữ ký đó.

Tuy nhiên, vì phiên bản tin rất dài nên việc mã hóa toàn bộ phiên bản tin sẽ rất mất thời hạn. Vì vậy, trong thực hiện, chữ ký số thường tận dụng phương pháp mã hóa giá trị hash của phiên bản tin. Việc này mang lại rất nhiều lợi ích như:

  • Những hàm hash là hàm 1 chiều, vì vậy dù đã đoạt hash cũng không thể biết được phiên bản tin gốc ra sao.
  • Khoảng cách hash là thắt chặt và cố định và thường rất nhỏ, vì vậy chữ số sẽ không còn chiếm quá nhiều dung tích.
  • Giá trị hash còn rất có thể dùng để làm kiểm tra lại phiên bản tin nhận được có nguyên vẹn hay là không?

Chữ ký số đem lại nhiều giá trị hơn chữ ký tay rất nhiều. Có nhẽ cũng vì vậy, việc xử lý chữ ký số phức tạp hơn nhiều chữ ký tay truyền thống cuội nguồn.

Xác định nguồn gốc

Hệ mã hóa bất đối xứng được chấp nhận tạo chữ ký với private key mà chỉ người chủ mới biết. Khi nhận gói tin, người nhận xác thực chữ ký bằng phương pháp dùng public key giải thuật, tiếp theo tính giá trị hash của phiên bản tin gốc và so sánh với hash trong gói tin nhận được. Hai chuỗi này phải trùng khớp với nhau. Tất nhiêu hệ mã hóa RSA vẫn có những thử thách về bình yên nhất định nhưng dù sao thì nó vẫn khá đáng tin cậy.

Tài liệu được giữ một kiểu toàn vẹn

Tin nhắn gửi từ chủ private key rất khó rất có thể bị hàng fake. Cũng chính vì nếu thay đổi tin nhắn thì giá trị hash cũng phải thay đổi theo. Những kẻ nghe lén trong mạng đương nhiên là rất có thể tìm cách đọc tin nhắn gốc và cả hash của nó. Nhưng hắn ta không thể thay đổi tin nhắn được vì hắn không hề có private key để sửa đổi chữ ký số cho tương thích.

Chữ ký số không thể phủ nhận

Trong giao dịch thanh toán, một gói tin kèm chữ ký số rất đơn giản và dễ dàng tìm ra được nguồn gốc của chữ ký đó. Cũng chính vì private key là kín đáo và chỉ người chủ của nó mới rất có thể biết, họ không thể chối cãi rằng chữ ký này sẽ không phải do họ phát hành. Cũng tương tự trường hợp trên, hệ mã hóa RSA hay ngẫu nhiên hệ mã hóa nào khác cũng đều phải có những vấn đề về bình yên nên việc này sẽ không thể lành mạnh tuyệt đối đúng đắn được.

Technology ngày càng phát triển, những giao dịch thanh toán điện tử, nhất là thương nghiệp điện tử đang rất được triển khai liên tục mỗi ngày, hàng giờ. Chữ ký số là một technology được chấp nhận xác định người chủ của tài liệu nào đó và kiểm tra tài liệu có nguyên vẹn hay là không.

Ở VN, chữ ký số áp được ứng dụng trong một trong những sinh hoạt ngành nhà băng và kế toán. Nhưng trong thời hạn tới, rất rất có thể chữ ký số sẽ thông dụng hơn, khi mọi người đang từ từ nhắm đến một trái đất không hề giấy bút.

You May Also Like

About the Author: v1000