Trao đổi với tôi

http://www.buidao.com

12/9/09

[Security] Introduction to Cryptography (Hashes - Digital Signatures)

HASH1

Ở đây không phải tôi muốn trình bày về các chuyện làm loạn thần kinh2. Các thuật toán hash rất thường được sử dụng trong khoa học máy tính, và dường như là giải pháp thông dụng nhất để tăng tốc quá trình xử lý index trong các database hoặc các mảng dữ liệu lớn. Mặc dù chúng phổ dụng như thế, nhưng nhiều người vẫn không biết hash là cái quỷ gì. Trước khi chúng ta có thể bàn về chữ ký điện tử (digital signatures), bạn cần phải tìm hiểu về hash.

Thuật toán hash sẽ lấy ra một khối dữ liệu lớn và tinh giản nó thành một fingerprint 3, hay còn gọi là digest 4 của dữ liệu ban đầu. Nếu bạn đang là một khoa học gia máy tính, xin bạn vui lòng bỏ qua một hoặc hai đoạn tiếp theo đây, vì e rằng các mô tả về hash của tôi sẽ làm bạn chán. Tôi nghĩ rằng đưa ra hai ví dụ sau đây là cách đơn giản nhất để giải thích về thuật toán hash.

Một là, nếu tôi đưa cho bạn con số 483.820 và bắt bạn phải chia cho 4, bạn sẽ báo kết quả là 120.955. Như vậy, ta nói 120.955 là fingerprint của phép toán (483.820 / 4). Dù bạn có làm bài toán này bao nhiêu lần đi nữa, thương số vẫn sẽ là 120.955. Nhưng nếu bạn thay bất kỳ số hạng nào trong bài toán này bằng một con số khác, thương số sẽ không còn là 120.955 nữa.

Nhưng nếu tôi trao cho bạn con số 120.955 và không cho bạn biết thêm một thông tin nào khác, bạn sẽ không thể nói chắc chắn với tôi phép toán nguyên thủy là gì, vì rằng có một số vô hạn các phép chia có thể có thương số là 120.955.

Trên nhiều phương diện, các đặc điểm vừa nêu rất giống với những điều có liên quan đến thuật toán hash. Để hash, bạn sẽ lấy ra một khối dữ liệu lớn và tiến hành tính toán một phép tính nào đó trên toàn bộ khối dữ liệu đó. Kết quả thu được sau khi hash sẽ là một giá trị nhỏ hơn dữ liệu nguyên thủy. Nếu bạn thay đổi dữ liệu nguyên thủy, dù chỉ một bit thôi, giá trị hash được sẽ khác đi. Cũng như phép chia vừa nêu ở trên, sẽ có rất nhiều tập hợp dữ liệu khác nhau cùng tính ra chung một giá trị hash.

Hai là tôi muốn nói đến giá trị CRC (cyclic redundancy check)5. Giá trị này thường được gắn vào sau đa số các message khi chúng đi trên đường truyền.

CRC

Ảnh 1 : CRC

Khi message sắp được gửi lên đường truyền, thường sẽ có một đa thức duyệt qua tất cả các byte của message. Đa thức này sẽ cho kết quả là mã CRC (CRC code). Mã này sẽ được gắn vào sau message rồi gửi đi. Khi message đến đích, hệ thống ở nơi nhận sẽ duyệt bằng cùng một đa thức qua toàn bộ message (dĩ nhiên là trừ CRC nguyên thủy) và thu được bản CRC thứ hai (ta gọi là CRC’ như trong hình). Sau đó phần mềm sẽ so sánh CRC’ với CRC nguyên thủy. Nếu hai CRC trùng nhau, ta có thể tin chắc rằng message đã không hề bị sửa đổi khi gửi qua mạng.

CRC hoạt động như một fingerprint hay một digest của message, dùng để kiểm tra lại message khi nhận. Nhiều message có thể sản sinh ra cùng một giá trị CRC, và nếu chỉ một bit của message bị thay đổi, giá trị CRC sẽ thay đổi. CRC phô bày tất cả các thuộc tính tương đồng với các thuộc tính của hash.

Các thuật toán hash được dùng trong mã hóa đều được thiết lập với một số thuộc tính đặc biệt sau:

- Bạn không thể cho hash duyệt ngược để tìm lại bất kỳ clear text 6 nguyên thủy nào.

- Digest được tạo ra sẽ không thể cho bạn biết bất kỳ điều gì về clear text nguyên thủy.

- Không thể tính toán để tạo lại clear text được từ một giá trị cụ thể đã hash ra. Điều này làm cho khi attacker tráo văn bản sẽ gây ra việc không trùng khớp digest.

Có nhiều thuật toán hash để mã hóa. MD2 là thuật toán hash của nhóm RSA7, tạo digest 128 bit dùng tốt cho bộ vi xử lý cấp thấp 8 bit. MD5 cũng tạo ra digest 128 bit, dùng tốt cho bộ xử lý 32 bit. Thuật toán hash SHA-1 cũng dùng tốt cho các bộ xử lý cao cấp và tạo ra digest 160 bit.

Ghi chú:

Trong thực tế, các đa thức tạo CRC sẽ được xây dựng theo cách sao cho khi hệ thống ở nơi nhận duyệt bằng cùng một đa thức, sẽ không chỉ duyệt trên phần message, mà cả trên phần CRC nguyên thủy được đính kèm. Nếu message chưa bị xâm hại, CRC sẽ “cancel”việc tính toán một cách ngon lành và kết quả duyệt lần này của đa thức sẽ được gán bằng 0. Nếu có bất kỳ bit nào trong message hoặc CRC bị thay đổi, kết quả cho ra của đa thức sẽ khác 0. Điều này làm cho việc kiểm tra tính toàn vẹn (intergrity) của message trở nên nhanh chóng mà không phải dùng đến một phép toán so sánh hiện (explicit compare operation).

CHỮ KÝ ĐIỆN TỬ (Digital Signatures)

Bây giờ bạn đã là chuyên gia về thuật toán hash, hãy xem xem ta dùng chúng cách nào. Trong ví dụ này, tôi muốn thay đổi bài toán của chúng ta một chút. Hãy giả định rằng ở mục này tôi lại không quan tâm việc có ai đọc trộm Bí kíp nấu ăn của Bà Cụ (BKNA) hay không. Nếu vậy, BKNA có thể được gửi đi như một clear text. Việc để cho BKNA ở dạng clear text sẽ làm đơn giản hóa về mặt hình ảnh và sẽ cho phép ta tập trung hơn vào việc xử lý chữ ký điện tử.

Tuy nhiên, tôi rất muốn bảo đảm rằng BKNA là phải do chị tôi gửi đến. Tôi rất muốn ngăn ngừa một vấn đề đã từng được giải thích trước đây, đó là một hacker nào đó cố tình giúi cho tôi một BKNA khác.

Ở ảnh 2 trình bày thuật toán hash như một cái phễu. Bản clear text lớn sẽ được cho đi qua phễu và dưới phễu ta sẽ thu được digest.

Tao_chu_ki_dien_tu

Ảnh 2 : Tạo chữ ký điện tử

Như trong hình minh họa, ta bắt đầu với BKNA ở dạng clear text. Tại đây một thuật toán hash thích hợp đã được chọn để xử lý clear text BKNA , tạo ra một digest. Tiếp theo, key riêng của người gửi sẽ được dùng để mã hóa digest này. Digest đã mã hóa sẽ được gắn vào với clear text BKNA nguyên thủy và gửi đến người nhận qua đường Internet.

Kiem_tra_1_chu_ki_dien_tu

Ảnh 3 : Kiểm tra một chữ ký điện tử

-------------

1 [hash] băm; (làm cho, mớ) lộn xộn.

2 Neuro-toxic substances

3 dấu tay-nên hiểu là cái đặc trưng-ND

4 bảng tóm tắt, bảng liệt kê

5 công cụ kiểm tra tính dư thừa tuần hoàn-nên hiểu là công cụ kiểm tra tính toàn vẹn của dữ liệu, và có thể dùng đi dùng lại nhiều lần-ND

6 bạch văn-văn bản đọc được, chưa bị mã hóa

7 Nhóm 3 người ở Học viện Kỹ thuật MIT (Rivest, Shamir và Adleman) đã sáng tạo ra thuật toán mã hóa công khai.

-------------

Tài liệu tham khảo : PKI Implementing and Managing E-Security (Andrew Nash, William Duane, Celia Joseph, and Derek Brink)

Link: http://daoduyhieu.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3dHACKING%2520-%2520SECURITY