Chữ ký số dựa trên kiến trúc mật mã khóa công khai để xác minh tính xác thực của tài liệu và nhận dạng của người gửi. Hai cách tiêu chuẩn để có được chữ ký số là thuật toán RSA (Rivest–Shamir–Adleman) và DSA (Digital Signatures Algorithm - Thuật toán chữ ký số), nhưng cả hai đều khác nhau trong việc thực hiện các chức năng mã hóa và giải mã.
Sau đây là tổng quan về một trong những thuật toán DSA tiêu chuẩn ngành, quy trình làm việc của nó với tổng quan ngắn gọn về việc tạo và xác minh khóa và chữ ký, các bước liên quan đến quy trình tổng thể, ưu/nhược điểm và ứng dụng của nó.
1. Giới thiệu thuật toán chữ ký số
DSA (Thuật toán chữ ký số) kết hợp các thuộc tính đại số của các bài toán logarithm rời rạc và mô đun lũy thừa để tạo chữ ký điện tử cho các ứng dụng khác nhau. Nó được đề xuất vào năm 1991 và được NIST (Viện Tiêu chuẩn và Công nghệ Quốc gia) thông qua làm Tiêu chuẩn Xử lý Thông tin Liên bang vào năm 1994.
Hầu hết các thuật toán tạo chữ ký số đều tuân theo kỹ thuật điển hình là ký thông báo tóm tắt (băm của thông báo thực tế) bằng khóa riêng nguồn để tạo dấu vân tay kỹ thuật số.
Tuy nhiên, tình hình lại khác trong DSA vì nó tạo ra hai chữ ký bằng cách kết hợp hai chức năng ký và xác minh phức tạp và duy nhất. Do đó, thuật toán DSA không phải là việc sử dụng đơn giản khóa riêng và khóa chung khi bắt đầu và kết thúc giao tiếp.
2. Tầm quan trọng của thuật toán chữ ký số
Do các mối đe dọa mạng ngày càng gia tăng, bất cứ khi nào người dùng gửi dữ liệu qua internet, cần phải xác định và xác minh tính xác thực của chủ sở hữu. Phải đảm bảo chủ sở hữu tài liệu đáng tin cậy và không ai thực hiện bất kỳ thay đổi nào trong quá trình truyền tải.
Chữ ký số là chữ ký điện tử giúp người nhận xác thực nguồn gốc của thông điệp. Bạn có thể tạo các chữ ký điện tử này thông qua các thuật toán khác nhau và DSA là một trong số đó. Trong DSA, người gửi tạo một chữ ký điện tử để đưa nó vào thư sao cho bất kỳ ai cũng có thể xác thực nó ở đầu nhận.
Những lợi ích mà DSA mang lại là:
- Chống chối bỏ: sau khi xác minh chữ ký, người gửi không thể tuyên bố là chưa gửi dữ liệu. - Tính toàn vẹn: việc sửa đổi dữ liệu trong quá trình truyền sẽ ngăn không cho thực hiện được xác minh cuối cùng hoặc giải mã tin nhắn. - Xác thực tin nhắn: kết hợp khóa riêng tư/công khai phù hợp giúp xác minh nguồn gốc của người gửi.
3. Thuật toán xác thực người gửi như thế nào?
Thuật toán DSA hoạt động trên cơ chế tính toán có hệ thống tính toán giá trị băm và chữ ký số tạo thành hai số 160 bit từ thông báo tóm tắt và khóa riêng. Tính ngẫu nhiên làm cho chữ ký không xác định. Nó sử dụng khóa chung để xác thực chữ ký, phức tạp hơn nhiều so với RSA.
Chu trình DSA tuân theo ba bước chính sau để hoàn tất quy trình:
a, Tạo khóa: Quá trình này dựa trên khái niệm mô-đun lũy thừa để có được các khóa riêng (x) và khóa chung (y) thỏa mãn các điều kiện toán học 0 < x < q và y = gx mod p. Trong đó q là ước số nguyên tố, p là số nguyên tố và g thỏa mãn các điều kiện g**q mod p = 1 và g = h**((p–1)/q) mod p. Do đó, tạo các gói khóa riêng và khóa chung {p,q,g,x} và {p,q,g,y}. b, Tạo chữ ký: Thuật toán băm tạo ra một bản tóm tắt thông báo, được chuyển dưới dạng đầu vào cho hàm ký để tạo hai đầu ra biến, r và s, được đóng gói dưới dạng chữ ký {r,s} sao cho thông báo và các biến này được gửi dưới dạng gói đến người nhận. c, Xác minh chữ ký: Quá trình sử dụng hàm băm để xuất thông báo tóm tắt và kết hợp biến s với các tham số khác từ bước tạo khóa để tạo thành phần xác minh v. Hàm xác minh so sánh biến được tính toán v với tham số r từ bó {M,s, r}.
Để tóm tắt phi toán học quá trình trên:
- Bạn tạo khóa với sự trợ giúp của thuật toán tạo khóa để ký tài liệu. - Sau đó, sử dụng thuật toán chữ ký số để tạo chữ ký. - Sử dụng hàm băm để tạo thông báo tóm tắt và kết hợp nó với DSA để tạo chữ ký số. - Gửi chữ ký kèm theo dữ liệu để người nhận xác thực. - Người nhận xác thực chữ ký bằng cách sử dụng thuật toán xác minh. Đó là hàm băm được sử dụng ở trên để tạo thông báo tóm tắt.
4. Ưu điểm của việc sử dụng thuật toán chữ ký số
Tính toán chữ ký nhanh
Yêu cầu ít dung lượng lưu trữ hơn cho toàn bộ quá trình
Có sẵn miễn phí (Không có bằng sáng chế) để sử dụng toàn cầu miễn phí.
Độ dài chữ ký nhỏ
Quan sát trong thời gian thực
Không xâm lấn
DSA được chấp nhận trên toàn cầu để tuân thủ pháp luật.
Hiệu quả về thời gian (tiêu thụ thời gian thấp so với các quy trình ký thực, v.v.)
5. Nhược điểm của việc sử dụng thuật toán chữ ký số
Quá trình này không bao gồm khả năng trao đổi khóa.
Mật mã cơ bản phải mới để đảm bảo sức mạnh của nó.
Việc tiêu chuẩn hóa của các nhà cung cấp phần cứng và phần mềm máy tính trên RSA có thể gây ra sự cố do tiêu chuẩn xác thực thứ hai của DSA.
Các hoạt động còn lại phức tạp đòi hỏi nhiều thời gian để tính toán và do đó xác minh chữ ký.
Nó chỉ đảm bảo xác thực chứ không bảo mật vì thuật toán không mã hóa dữ liệu.
Thuật toán DSA tính toán hàm băm SHA1 để tạo thông báo tóm tắt. Do đó, nó phản ánh tất cả các sai sót của hàm băm SHA1 trong thuật toán.
6. DSA so với RSA
Thuật toán chữ ký số là một thuật toán mã hóa khóa bất đối xứng được các cơ quan Hoa Kỳ áp dụng để liên lạc bí mật và không bí mật. Trong khi RSA là một thuật toán mã hóa khóa công khai cũng sử dụng số học mô-đun, sức mạnh của nó phụ thuộc vào vấn đề phân tích thừa số nguyên tố để bảo mật thông tin liên lạc và chữ ký số. Do đó, không giống như các thuật toán mã hóa thông thường như RSA, DSA chỉ là tiêu chuẩn riêng cho chữ ký số.
Mặc dù cả hai đều kết hợp các thuật toán toán học khác nhau, nhưng sức mạnh mật mã là tương đương nhau. Sự khác biệt chính giữa hai thuật toán thu hẹp ở tốc độ, hiệu suất và hỗ trợ giao thức SSH.
Trái ngược với DSA, RSA chậm trong quá trình giải mã, tạo khóa và xác minh nhưng lại nhanh chóng trong quá trình mã hóa và ký. Tuy nhiên, xác thực yêu cầu cả hai và sự khác biệt về tốc độ là không đáng kể trong các ứng dụng trong thế giới thực.
Một điểm khác biệt nữa nằm ở sự hỗ trợ cho giao thức mạng Secure Shell. RSA hỗ trợ SSH gốc và phiên bản thứ hai an toàn SSH2, trong khi DSA chỉ hoạt động với SSH2.
Món này trừu tượng và phức tạp lắm ạ. Bản thân em vẫn đang dùng chữ ký số của cty nhưng em cũng chả hiểu nổi nó như thế nào. Chỉ biết rằng hợp đồng này, văn bản này ai đã confirm vào thôi còn xác thực cụ thể chính xác thì chịu ạ.
Tình cảnh Ucraina và Nato giờ như "Chó lết trôn, gà gáy dở" lêu lêu
Món này trừu tượng và phức tạp lắm ạ. Bản thân em vẫn đang dùng chữ ký số của cty nhưng em cũng chả hiểu nổi nó như thế nào. Chỉ biết rằng hợp đồng này, văn bản này ai đã confirm vào thôi còn xác thực cụ thể chính xác thì chịu ạ.
Tình cảnh Ucraina và Nato giờ như "Chó lết trôn, gà gáy dở" lêu lêu
Món này trừu tượng và phức tạp lắm ạ. Bản thân em vẫn đang dùng chữ ký số của cty nhưng em cũng chả hiểu nổi nó như thế nào. Chỉ biết rằng hợp đồng này, văn bản này ai đã confirm vào thôi còn xác thực cụ thể chính xác thì chịu ạ.
Em cũng đang dùng mà chẳng hiểu rì, cứ OK thì ký thoai
Em chỉ không hiểu là khi đi tới cơ quan nào , ví dụ, nơi không có mạng, chìa cái tờ giấy in từ máy in ra, bảo với người ta rằng có chữ ký số rồi, mà họ thấy chỗ quen thường nhìn chẳng chữ ký, chẳng dấu má gì, thì làm việc ra sao?
Lúc nào em rảnh em sẽ viết một bài rõ ràng hơn một chút cho các cụ. Em thì không phải chuyên gia bảo mật mã hóa hay gì nhưng mấy món này thì cũng có nắm được cơ bản đủ để hiểu một chút. Tất nhiên là sẽ có những chỗ em mù mờ hoặc giải thích không được rõ ràng lắm, mong các cụ thông cảm.
Còn đầu tiên thì em cẩu cái bài này về để hiểu rõ mối tình giữa Alice và Bob trong ngành mật mã: Link nguồn
Câu hỏi về Alice, Bob và Eve - 3 nhân vật tiêu chuẩn để thảo luận về mật mã
Alice muốn gửi một bức thư cho Bob hoặc ngược lại, còn Eve thì đang cố nghe lén. Vấn đề truyền thống của mã hóa đó là, trước khi trao đổi một bức thư mã hóa, thì chúng phải chia sẻ một chìa khóa mã.
-» Vấn đề phân phối chìa khóa mã. Làm sao chia sẻ chìa khóa mã một cách an toàn mà không phải gặp nhau.
Các cách giải quyết:
Cách 1: sử dụng từ thời xa xưa * Alice sẽ gặp nhau trực tiếp, ví dụ 1 tuần 1 lần, để trao đổi chìa khóa mã đủ dùng trong 1 tuần (sồ mã chứa 7 khóa) -» Thông tin sẽ gián đoạn nếu họ không thể gặp nhau -» Họ có thể thuê trung gian chuyền hộ, nhưng sẽ giảm an toàn và tăng chi phí.
Cách 2: sơ đồ trao đồi chìa khóa mã Diffie - Hellman - Merkle được trình bày 1976 Mô tả kiểu lý thuyết, nếu Alice muốn gởi thư cho Bob, Alice sẽ nói Bob gửi cho Alice một cái hộp, trên đó gắn sẵn ồ khóa của Bob (móc 1 bên tai để vẫn mở được hộp nhé). Alice sẽ cho thư vào hộp, xong gắn ổ khóa mình vào hộp khóa của Bob (móc vào bên tai còn lại). Lúc này Bob đã có thể mở hộp mà không cần chìa của Alice.
* sử dụng hàm số một chiều tổng quát là Y^x(mod P) - Dịch ra là: Y mũ x xong chia cho P lấy phần dư . Alice và Bob sẽ thống nhất trước Y và p, ví dụ là 7^x(mod 11) * sau đó Alice bí mật chọn 1 số, ví dụ 3 = A, thay vào hàm 7^3(mod 11) = 2 = alpha (7^3 = 343 rồi chia cho 11 dư 2) Bob bí mật chọn 1 số, ví dụ 6 = B, thay vào hàm 7^6(mod 11) = 4 = beta (7^6 = 117.649 rồi chia cho 11 dư 4)
* Alice trao đồi kết quả với Bob 2, 4 mà không cần giữ bí mật, Eve có thể nghe lén kết quả này, nhưng sẽ không thể biết chìa khóa thật, chính Alice và Bob lúc này còn chưa biết chìa khóa là gì mà
* Alice và Bob sẽ thực hiện 1 tính toán nữa để xác định chìa khóa
Alice dùng hàm beta^A(mod 11) = 4^3(mod 11) = 9 Bob dùng hàm alpha^B(mod 11) = 2^6(mod 11) = 9
* số 9 sẽ được dùng làm chìa khóa để mã hóa thư -» Alice sẽ không cần trực tiếp gặp Bob để trao đổi chìa khóa, nhưng vẫn cần liên hệ trước để gửi các thông số tính toán chìa khóa
P/s: để cho dễ hình dung thì em photoshop nhanh cái hộp đồng hồ nước thì nó như thế này. Bob sẽ khóa 1 tai. Alice sau khi viết thư bỏ vào hộp xong thì khóa tai còn lại và gửi đi.
Cách 3: hệ thống bất đối xứng RSA- Rivest, Shamir, Adleman được còng khai 1977 (hoặc một hệ tương tự được phát minh độc lập bởi Ellis, Cocks, Williamson) Mô tả kiểu lý thuyết, Alice sẽ làm sẵn một loại ổ khóa mang tên Alice và để sẵn ở bưu điện, Bob muốn gửi thư cho Alice thì cứ để thư vào hộp và khóa lại bằng khóa của Alice, lúc này không ai có thể mở được trừ người giữ chìa khóa là Alice
* Alice chọn cho mình một chìa khóa công khai (public key) là N, N là tích của 2 số nguyên tố rất lớn p và q (private key). Alice sẽ công khai N và giữ bí mật p và q * Bob sẽ sử dụng một hàm một chiều để mã hóa thư M với chìa khóa là N và gửi nội dung c đã mã hóa cho Alice, c = M*e*(mod N) Eve có thể đọc trộm thư c và biết chìa khóa N, nhưng vì mà hóa bằng hàm một chiều (mod N), nên không thể đảo ngược để biết nội dung * Nhưng Alice thì có thể đảo ngược kết quả dựa trên p và q, M = c*d*(mod N) với d tính toán dựa trên e, p và q -» Alice không cần liên hệ trước với Bob, chỉ cần công khai N -» về nguyên tắc thì có thể tìm ra được p và q dựa trên N, nhưng N thường rất lớn > 10^130, tương đương số 1 và 130 số 0 sau đó. Tuy nhiên với công bó năm 2019 của Google về việc họ có thể cho máy tính lượng tử giải toán, thì khả nãng bảo mật của RSA đã không còn chắc chắn nữa. Phần thắng có vẻ đang ở bên giải mã.
Các cụ lưu ý các phép toán ở trên chỉ là để minh họa chứ phép toán thực sự thì nó loằng ngoằng hơn nhiều. Như ví dụ ở trên e là một số như từ trên trời rơi xuống nhưng thực ra là phải suy ra từ p và q cả.
Cách 4: cách này được đưa ra bởi Phil Zimmermann, dự án PGP (Pretty Good Privacy) để giảm thời gian mã hóa và giải mã * Alice sử dụng mã hóa đối xứng để mã hóa thư, và có một chìa khóa mã cần được gửi cho Bob * Alice dùng RSA đề mã hóa chìa khóa mã * Alice gửi cả 2 cho Bob -» Bob sẽ giải mã RSA để lấy chìa khóa, và dùng chìa khóa để mở thư.
Một vấn đề nữa nảy sinh là làm sao biết đây là Alice mà không phải là một ai khác? * Alice sẽ tạo một chữ ký, ví dụ mã m, và mã hóa nó bằng chìa khóa riêng (private key), sigma = m^d(mod N) * Sau đó cho đoạn sigma và thư và làm các bước mã hóa đối xứng - lấy chìa khóa - mã hóa RSA cho chìa khóa - gửi cho Bob * Bob sẽ giải mã RSA - lấy chìa khóa - giải mã thư, và kiểm tra xem thư này có phải là của Alice không bằng chìa khóa công khai của Alice và sigma, sigma^e = m(mod N)
Vắn đề đọc trộm chưa thể giải quyết bằng kỹ thuật nhưng vẫn còn những cách cổ điển có thể dùng * Eve trộm chìa khóa riêng của Alice * Xem trộm trước khi Alice mã hóa hoặc sau khi Bob giải mã Eve giả làm Bob với Alice, và Eve giả làm Alice với Bob
Tạm đến đây đã. Lúc nào rảnh em sẽ tìm cách minh họa hàm băm (hash function) bằng mấy tấm hình photoshop nên có thể sẽ không được nhanh lắm. Các cụ thông cảm
Băm là gì? - Dữ liệu đầu vào + Thuật toán/hàm băm = dữ liệu đầu vào (giữ nguyên không đổi) + giá trị băm (hash value). Ta sử dụng giá trị băm để xác định dữ liệu đầu vào là chính xác. Dữ liệu đầu vào ở đây có thể là bất cứ thứ gì: một câu văn, một bức thư, một tờ hóa đơn điện tử, hoặc là nội dung của cả một cuốn từ điển.
- Nghe thì có vẻ hơi rắc rối nên em lấy ví dụ thế này : Giả sử dữ liệu đầu vào là một con vật nào đó (lợn chẳng hạn) có khả năng mọc đuôi ngay lập tức nếu ăn một loại thức ăn đặc biệt. Thì ta có: thức ăn đặc biệt là thuật toán, còn cái đuôi mọc ra chính là giá trị băm. Cái đuôi sẽ là thứ xác định điểm khác nhau giữa một đàn lợn với nhau. Và do đó, các yêu cầu đối với thức ăn và cái đuôi tạo ra hay nói chung là hàm băm ở bảng dưới:
Lợn-Thức ăn-Đuôi
Dữ liệu-Hàm băm-Giá trị băm
1. Không thể đảo ngược (hàm 1 chiều)
Từ con lợn thì ta tạo ra được cái đuôi, nhưng từ cái đuôi thì không thể tạo ngược ra được con lợn. Chỉ có thể xác thực cái đuôi này đúng là thuộc về con lợn này.
Từ giá trị băm thì không thể suy ngược ra được dữ liệu. Đây cũng chính là điểm khác biệt lớn nhất giữa băm và mã hóa (mã hóa-giải mã là hàm 2 chiều).
2. Khuếch tán (hiệu ứng tuyết lở)
Nếu con lợn ban đầu thay đổi về trạng thái (tăng hoặc giảm cân, lớn lên hoặc già đi…), thì cái đuôi tạo ra sau khi thay đổi cũng sẽ phải khác hoàn toàn không thể nhận ra với trước khi thay đổi.
Tương tự, dù dữ liệu ban đầu chỉ thay đổi một dấu chấm, dấu phẩy hoặc dấu cách thì giá trị băm tạo ra phải khác biệt hoàn toàn so với giá trị băm trước khi thay đổi.
3. Thống nhất
Hai con lợn là nhân bản vô tính của nhau thì luôn mọc ra hai cái đuôi giống hệt nhau.
Hai file văn bản là copy của nhau thì giá trị băm tạo ra sau khi chạy cùng 1 hàm băm cũng sẽ phải giống hệt nhau.
4. Độ dài cố định
Dù lợn trưởng thành hay lợn con, lợn nặng cả tạ hay chỉ chục cân; thì độ dài đuôi mọc ra sẽ phải luôn bằng nhau
Dữ liệu ngắn như một câu văn hoặc dài như cả cuốn bách khoa toàn thư thì sau khi băm cũng sẽ chỉ được phép tạo ra một đoạn giá trị băm có độ dài cố định. Cái này cũng chính là lý do mà hàm băm không thể đảo ngược.
5. Khó tiên đoán
Thức ăn cho lợn phải đảm bảo: từ con lợn và thức ăn khó có thể suy ra cái đuôi nó mọc ra sẽ thế nào.
Hàm băm phải đủ độ phức tạp để khó có thể đoán được kết quả (giá trị băm) nếu có thuật toán và dữ liệu đầu vào.
6. Chống đụng độ (collision)
Hai con lợn khác nhau không được phép tạo ra hai cái đuôi giống hệt nhau. Nếu trường hợp này xảy ra thì nó gọi là đụng độ hoặc va chạm(collision).
Thuật toán băm cho ra giá trị băm với độ dài cố định thì về mặt toán học không thể có hàm băm mà không hề có va chạm (đụng độ).
Vậy tất cả những cái băm vằm trên để làm gì? Nói đơn giản là để xác thực con lợn. Lấy trường hợp lợn xuất chuồng để bán, nhân viên y tế đến kiểm tra sức khỏe. Mỗi một con lợn sẽ có một biên bản kiểm tra sức khỏe riêng. Vậy giữa một đống biên bản kiểm tra thì lấy cái gì để xác định giữa các con lợn với nhau? Rằng con này khỏe mạnh đủ điều kiện giết mổ, con kia đang sắp chết hoặc có bệnh ngầm?
Câu trả lời tất nhiên là nhân viên y tế sẽ cắt cái đuôi của từng con lợn một và đính kèm với biên bản kiểm tra sk tương ứng. Khi người mua đến nông trại mua lợn, thì chủ trại sẽ đưa biên bản ktsk đính kèm đuôi lợn ra. Người mua sẽ nhìn biên bản và dùng đuôi lợn so sánh để xác thực đúng con lợn này khỏe mạnh, đủ điều kiện để mua.
Cách cắt đuôi lợn xác thực để tránh trò lập lờ đánh lận con đen của chủ trại kiểu như: nhân viên y tế có thể sơn số 1 lên người con lợn thứ nhất xong viết kết quả lên biên bản số 1, tương tự với con số 2 và 3 vân vân. Nhưng không có gì có thể cản được chủ trại sửa những số đã sơn lên những con lợn bệnh tật, ốm yếu thành số của những con có biên bản kt khỏe mạnh.
2. Đụng độ khi băm a) Trước khi có người chém gió về perfect hash function (hàm băm hoàn hảo-nghĩa là hàm băm không có va chạm hay đụng độ) thì em xin nói luôn là cái hàm này chỉ tồn tại khi số lượng dữ liệu đầu vào là cố định, nghĩa là ta biết trước giới hạn của dữ liệu đầu vào.
Ví dụ: đàn lợn chỉ có khoảng 60-70 con nhưng thức ăn cho lợn có khả năng tạo ra 100 loại đuôi khác nhau thì cái thức ăn ở trên được gọi là hoàn hảo. Còn đàn mà có tới 120 con lợn thì cái loại thức ăn này kiểu gì cũng sẽ cho ra 20 đôi lợn có đuôi giống hệt nhau. Lúc đấy thì ta phải tìm một loại thức ăn khác cho ra 200 hoặc 1000 cái đuôi khác nhau.
b) Ví dụ cụ thể về đụng độ(va chạm) và sự nguy hiểm của nó:
Giả sử ta có một hàm băm kiểu tối cổ là lấy 8 chữ cái đầu trong mỗi từ của văn bản để thành giá trị băm. Dù cái hàm băm này chết ngay từ vòng gửi xe vì không đạt khuếch tán và không khó tiên đoán nhưng vì là ví dụ nên thôi ta cứ dùng tạm.
Giờ Bob muốn gửi thư cho Alice với nội dung sau:
Anh có công việc đầy đủ, lương lậu nhiều. => Băm ra thì ta có “ACCVDDLL” (chữ N của “nhiều” bị mất vì quá 8 chữ)
Vì tin tưởng độ xác thực cao của hàm băm trên, Bob mới cho thư vào phong bì không đề tên người gửi chỉ viết giá trị băm ACCVDDLL và địa chỉ người nhận là Alice lên bì.
Khổ cái là Eve lại là nhân viên bưu điện và muốn phá hoại cặp đôi này. Tất nhiên nguyên tắc bưu điện là Eve không được phép mở thư của Bob, cho nên cô ta không làm thế. Mà cô ta sẽ tìm ra một câu tương ứng mà tạo ra được giá trị băm y như ACCVDDLL nhưng nội dung khác hoàn toàn. Và do đó, Eve chế ra bức thư sau:
Anh có cô vợ dâm đãng, lăng loàn. Chúng mình chia tay nhau đi => Băm ra vẫn được “ACCVDDLL” (đoạn sau bỏ hết vì hàm băm chỉ lấy 8 chữ cái đầu)
Sau đó bức thư chế này được cho vào bì thư khác rồi Eve viết giá trị băm cũng như địa chỉ của Alice lên bìa sao cho giống bản gốc rồi gửi đi. Như vậy là cô ta đã thành công trong việc phá hoại.
Có 2 điểm cần lưu ý ở đây:
+ Một là Eve hoàn toàn không cần biết nội dung gốc của bức thư, cô ta chỉ cần tạo ra một đoạn dữ liệu khác có giá trị băm giống hệt giá trị của Bob là đủ.
+ Hai là thuật toán băm trong trường hợp này chỉ mới dùng để xác thực nội dung bên trong bức thư chứ không hề có khả năng xác thực người gửi thư.
Xác thực nội dung dùng hàm băm thì được gọi là checksum(Giá trị tổng kiểm, mục đích chủ yếu để tìm ra lỗi hoặc sai khác trong nội dung). Còn xác thực cả người gửi thì mới cần dùng đến cái gọi là chữ ký số và nó sử dụng hàm băm mật mã. Cái này ở mục II em sẽ nói rõ hơn.
Các hàm băm (checksum) phổ biến
a) CRC (Cyclic Redundancy Check-Chu trình kiểm dư):
Phổ biến thì ta sẽ thấy CRC-16 hoặc CRC-32. Ra đời năm 1961, khá là lâu đời.
Nói đúng thì CRC không thực sự là một checksum theo nghĩa hiện đại, nó được xếp vào dạng mã kiểm tra lỗi. Vì thuật toán của nó có thể dễ dàng đảo ngược nên khi tìm cách tấn công CRC thì thường người ta tính ngược lại thuật toán chứ không tìm cách va chạm. Em nhớ không nhầm thì CRC có thể sửa bằng cách thêm hay bớt các số 0 vào file (đọc cũng khá lâu rồi). Khá hơn thì có thể sửa dữ liệu thoải mái xong tính lại CRC và điền vào cuối file hay khu vực thích hợp.
b) MD (Message-digest algorithm-Thuật toán Tiêu hóa Tin nhắn):
Phổ biến nhất là MD5. Ra đời năm 1989 với phiên bản đầu là MD2 do giáo sư Ronald Rivest sáng chế. Năm 1990 thì cải tiến thành MD4 và cuối cùng thì năm 1991 ra đời MD5.
Hàm băm MD5 lúc ra đời khá tốt nên từ những năm 90 đến giữa những năm 2000 thì nó không chỉ được dùng làm checksum mà còn làm cả nhiệm vụ của hàm băm mật mã và nó cực kỳ phổ biến.
Nhưng đến tháng 8 năm 2004 thì bốn pháp sư Trung Hoa là Xiaoyun Wang, Dengguo Feng, Xuejia Lai, và Hongbo Yu công bố phương pháp tính toán đụng độ cho mọi giá trị MD5 có thể có.
Trước đấy đã có những nỗ lực tấn công đụng độ cho MD5 và có vài kết quả bước đầu, nhưng đến 2004 thì mới có một phương pháp toàn diện. Cho nên giờ MD5 đã trở thành dĩ vãng và gần như ko còn được sử dụng trên môi trường web nữa.
c) SHA (Secure Hash Algorithm – Thuật toán băm bảo mật):
Phổ biến nhất là SHA-1 nhưng bây giờ thì chủ yếu dùng SHA-2 vì SHA-1 đã có thể bị tấn công đụng độ bằng siêu máy tính.
Ra đời năm 1993 do Cơ quan An ninh Quốc gia Mỹ phát triển (NSA). SHA-0 chỉ khác với SHA-1 đúng 1 bước đảo bit, theo lời NSA là để bảo mật hơn. Còn bản chất thì SHA-0 với 1 nó giống như kiểu “copy có chỉnh sửa” của MD nhưng tạo ra chuỗi giá trị băm (hash value) có độ dài lớn hơn MD5 (MD5 là 128 bits-tương ứng 16 bytes so với 160 bits-20 bytes của SHA).
Vì cơ chế khá giống MD5 nên từ đầu năm 2005 các phương pháp tấn công SHA-1 cũng đã bắt đầu xuất hiện. Và nữ giáo sư Xiaoyun Wang cũng góp phần không nhỏ cho các phương pháp tấn công này. Giảm độ phức tạp từ 2^80 xuống 2^63.
Nói thêm một chút về cái độ phức tạp này. Vì độ dài giá trị băm của SHA là 160 bit tương ứng ta có tổng tất cả các giá trị băm SHA-1 có thể là 2^160 giá trị. Kết hợp tấn công vét cạn và nghịch lý ngày sinh để tìm đụng độ(va chạm) thì ta chỉ cần chạy 2^80 kết quả khả dĩ là thành công. Và giảm từ 2^80 xuống 2^63 là cả một bước tiến rất lớn vì đây là hàm mũ 2. Cứ số mũ giảm 1 đơn vị kiểu như 2^80 xuống 2^79 là giảm được một nửa khối lượng công việc. Ở đây giảm tới 2^17 tức là giảm được khối lượng công việc xuống hơn 130000 lần. Nó giống như công ty may mặc phải may 130000 cái áo mới có tiền thì nay chỉ cần may một cái là có tiền vậy.
Năm 2017 trung tâm nghiên cứu của Hà Lan hợp tác với Google tạo ra hai file PDF có giá trị băm SHA-1 giống hệt nhau nhưng nội dung khác nhau. Dù tốn rất nhiều năng lực tính toán và sự khác biệt giữa 2 file chỉ là đổi màu nền cái logo thôi nhưng cũng đủ làm bằng chứng cho việc SHA-1 đang trở nên lỗi thời và có khả năng bị tấn công.
Hiện tại thì thế giới web trong đó có cả VN đang dần chuyển sang dùng SHA-2 là chủ yếu. Nước Mẽo nó đã khuyến cáo nên tránh dùng SHA-1 từ những năm 2010. Các cụ lưu ý các loại như SHA-256, SHA-384, hay SHA-512 đều thuộc SHA-2 nhé.
SHA-3 là một kiểu băm mới khác hoàn toàn so với 1 và 2. NSA sử dụng nó như một giải pháp thay thế nếu SHA-2 có vấn đề. Nhưng có vẻ SHA-3 yêu cầu tính toán khá nặng nên ít được chú ý.
Các cụ thông thạo về luật cho em hỏi 1 chút được không ạ? Với việc đăng ký chữ ký số dễ dàng và có nhiều đơn vị cung cấp như trên! Thì muốn xác định được đâu là chữ ký số hợp pháp thì làm thế nào ạ?