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)

Hacking Techniques for Attacks (Part 4)

Hacking Techniques for Attacks (Những kỹ thuật hacker thường dùng với mục đích tấn công)

Các hacker hoàn toàn có thể trút hết cơn tàn phá mà không cần thiết phải chui vào trong hệ thống của bạn. Ví dụ, một hacker có thể đánh sụm máy chủ của bạn bằng cách cho máy bạn tràn ngập các tín hiệu khó chịu (obnoxious signal) hoặc tràn ngập các đoạn mã có hại (malicious code). Kỹ thuật này được gọi là tấn công từ chối dịch vụ (DoS – Denial of Service).

Các hacker sẽ tiến hành một cuộc tấn công DoS theo một trong hai phương pháp, cả hai phương pháp này đều khả thi. Phương pháp thứ nhất là làm tràn ngập máy tính mục tiêu bằng luồng thông tin áp đảo. Phương pháp thứ hai là gửi lệnh lừa đảo tuyệt khéo (well-crafted command) hoặc gửi dữ liệu sai (erroneous data) có thể làm sụm máy tính mục tiêu.

Một vài kỹ thuật hacker thường dùng với mục đích tấn công mà tôi giới thiệu trong bài viết này :

– Làm tràn ngập bằng SYN (SYN Flooding)

– Xì trum tấn công (Smurf Attacks)

– Làm quá tải hệ thống (System Overloads)

– Lừa đảo DNS (DNS Spoofing)

 

Phần 4 : Lừa đảo DNS (DNS Spoofing)

Có những kiểu tấn công DoS khác lại hoạt động gián tiếp. Những kiểu tấn công này thường không tập trung vào server mà thay vào đó, mục tiêu sẽ là client. Trong trường hợp này, máy tính client sẽ bị đánh lừa về nơi mà nó muốn đi lấy thông tin. Ví dụ, nếu bạn nghĩ rằng máy tính của bạn sẽ đi đến www.yahoo.com, nhưng hóa ra lại đi đến trang na ná như Yahoo! của hacker, thì có thể vô tình bạn đã cung cấp cho hacker password và những thông tin cá nhân của mình.

Bình thường, một máy tính client sẽ dùng query để hỏi DNS server, khi nó muốn đổi một tên domain hay một địa chỉ trang Web ra thành một địa chỉ IP. Có chuyện này, bởi vì máy tính client cần địa chỉ IP để định vị Web server hay email server dùng tên domain nó đang quan tâm. Quá trình này được tiến hành qua ba bước như sau :

1.Client hỏi DNS server địa chỉ IP ứng với tên domain là bao nhiêu.

2. DNS server sẽ dùng các query để tên domain đã được hỏi.

3. Client kết nối với Web server theo địa chỉ IP đã được DNS server cung cấp.

Domain_Name_System

Ảnh 5 : Hệ thống Domain Name (Domain Name System)

Tuy vậy, quá trình này có thể dễ dàng bị lợi dụng để đẩy các user cả tin đến những trang Web tầm bậy, hoặc hướng dẫn email đi (outgoing email) phải đi qua những máy tính bất lương. Việc này được thực hiện bằng cách ghi các địa chỉ IP sai vào database của DNS server . Khi điều này xảy ra, hầu như client không thể nhận ra được là đang có vấn đề. Khả năng bại lộ duy nhất chỉ có khi các entry của DNS sever được kiểm tra một cách đặc biệt, hoặc server của hacker bị down.

DNS_gia_mao

Ảnh 6 : DNS giả mạo

Trong trường hợp một entry của DNS server bị hack, chỉ có những email đi mới bị gửi đến khu vực lừa đảo, trừ phi mail server sử dụng cùng một DNS server với client. Trong trường hợp tệ hại như thế, cả email đi lẫn email đến (incoming email) đều bị hướng dẫn phải đi qua một máy tính bất lương. Tuy nhiên, trong ví dụ của chúng ta, giả định rằng mail server đang dùng một DNS server rất an ninh để phân giải tên các domain.

Trong trườnghợp DNS server bị hack thì :

1. Client B hỏi địa chỉ IP của “youremail.com”

2. DNS server đã bị hack sẽ trả lời lại một địa chỉ IP đã bị giả mạo là 192.168.0.10

3. Client B kết nối với mail server giả mạo và gửi mail đi.

4. Server giả mạo sẽ tạo bản email copy rồi gửi đến mail server thật.

5. Mail server thật-dùng một DNS server an ninh-sẽ gửi mail đến client như bình thường.

Kịch bản như trên có thể sẽ cung cấp cho hacker một số thông tin có giá trị. Ví dụ như, nếu client B là một bác sĩ hay một luật sư, hacker sẽ có thể truy xuất các hồ sơ nhạy cảm. Nếu client B đang làm việc trong một dự án tối mật, hacker có thể bán các thông tin cho một công ty cạnh tranh. Hoặc nếu như client đang được dùng như một trang Web bán hàng trực tuyến, hacker có thể chộp được từng email xác nhận (confirmation email), trong đó có đầy đủ địa chỉ khách hàng hoặc/và số của thẻ tín dụng.

Như bạn cũng thấy, một màn lừa đảo DNS có khả năng phá hoại rất rộng lớn. Khi hacker muốn biến mất một trang Web hay muốn chộp các email, hắn ta chỉ việc từ chối dịch vụ những ai dùng trúng DNS server đã bị hack. Tuy nhiên cũng có một cách giải quyết vấn đề này.

Các DNS server có thể được cấu hình sao cho an ninh hơn. Thực tế đánh giá cho thấy có khoảng một nửa đến ba phần tư số DNS server là chẳng có an ninh gì cả. Đây là vấn đề đã biết, vì vậy nếu bạn quan ngại rằng có khả năng các DNS server của bạn cũng chẳng an ninh, hãy tiếp xúc với ISP (Internet Service Provider : nhà cung cấp dịch vụ Internet) của mình và phỏng vấn họ về những software họ đã dùng; cũng như có an toàn không nếu bị tấn công theo kiểu lừa đảo. Hy vọng rằng, họ sẽ biết bạn đang nói về cái gì và sẽ cho bạn các câu trả lời xác đáng.

Qua 4 phần của bài viết này tại DaoDuyHieu’s Blog, tôi vừa giải thích một số cách hacker dùng để vô hiệu hoá hoặc làm sụp đổ các hệ thống tiêu mà không cần phải xâm nhập. Với các kỹ thuật làm tràn ngập kết nối giả mạo, làm sụp đổ do tràn bộ nhớ đệm hay lừa đảo DNS, các hacker có thể làm cho cuộc sống của bạn trở nên khốn đốn. Hơn nữa, mặc dù trong những kiểu tấn công này, hacker không thể xâm nhập được, nhưng nếu chúng được dùng kết hợp với những kiểu tấn công khác, các hacker có thể chiếm được quyền truy cập trái phép. Ví dụ, một hacker có thể sẽ nã dồn dập (hammer) firewall của bạn, đảm bảo giữ cho firewall của bạn trở nên quá bận bịu với việc sắp xếp các dữ liệu để trả lời vô ích. Điều này về lý thuyết đã cho phép hacker truy cập thoải mái hệ thống của bạn.

Về mặt thống kê mà nói, có nhiều khả năng tấn công những máy khác, hơn là tấn công máy tính của bạn như một mục tiêu. Tuy vậy, cũng có điều an ủi nho nhỏ. Nhiều user thích trực diện chiến đấu với các cuộc tấn công hơn là trở thành một nô lệ. May thay, bây giờ bạn đã có đủ kiến thức để hiểu cái gì xảy ra ở sau sân khấu. Các bài tiếp theo của mình sẽ được xây dựng từ những hiểu biết này sẽ cho phép bạn tự phòng thủ hiệu quả hơn và sẽ cập nhật tại DaoDuyHieu’s Blog, các bạn đón theo dõi nha.

Hacking Techniques for Attacks (Part 3)

Hacking Techniques for Attacks (Những kỹ thuật hacker thường dùng với mục đích tấn công)

Các hacker hoàn toàn có thể trút hết cơn tàn phá mà không cần thiết phải chui vào trong hệ thống của bạn. Ví dụ, một hacker có thể đánh sụm máy chủ của bạn bằng cách cho máy bạn tràn ngập các tín hiệu khó chịu (obnoxious signal) hoặc tràn ngập các đoạn mã có hại (malicious code). Kỹ thuật này được gọi là tấn công từ chối dịch vụ (DoS – Denial of Service).

Các hacker sẽ tiến hành một cuộc tấn công DoS theo một trong hai phương pháp, cả hai phương pháp này đều khả thi. Phương pháp thứ nhất là làm tràn ngập máy tính mục tiêu bằng luồng thông tin áp đảo. Phương pháp thứ hai là gửi lệnh lừa đảo tuyệt khéo (well-crafted command) hoặc gửi dữ liệu sai (erroneous data) có thể làm sụm máy tính mục tiêu.

Một vài kỹ thuật hacker thường dùng với mục đích tấn công mà tôi giới thiệu trong bài viết này :

– Làm tràn ngập bằng SYN (SYN Flooding)

– Xì trum tấn công (Smurf Attacks)

– Làm quá tải hệ thống (System Overloads)

– Lừa đảo DNS (DNS Spoofing)

 

Phần 3 : Làm quá tải hệ thống (System Overloads)

Một kiểu tấn công DoS khác là tấn công các phần mềm đang chạy trên máy tính mục tiêu. Trong các chương trình máy tính, cứ trung bình khoảng 1000 dòng lệnh sẽ có một lỗi (glitch, bug), mà một chương trình thì có thể dài đến cả tỉ dòng, như vậy số lỗi có thể sẽ lên đến cả trăm, cả ngàn. Nếu một hacker biết cách khai thác các lỗi đặc biệt này, anh ta có thể đánh gục được máy tính mục tiêu. Ví dụ, trong một chương trình mua hàng trực tuyến nổi tiếng, người ta đã phát hiện được một lỗi về lập trình có thể làm cho tải của bộ xử lý trung tâm tăng vọt lên đến 100%, như thế cũng có nghĩa là không chương trình nào khác có thể chạy được nữa. Lúc đó chỉ cần gửi đến một yêu cầu đơn giản có dạng chính thức “http://” là có thể cho server mục tiêu sụm bà chè.

Kiểu tấn công này cũng giống như tháo nắp lọ muối. Bình thường, lọ muối hoạt động rất tốt. Nhưng nếu có ai đó hiểu rõ cấu tạo của lọ muối và bí mật tháo lỏng nắp của nó ra. Thế là ô la la, dĩa của bạn ngập đầy muối mặn đắng.

Kiểu tấn công DoS này thường được dùng để khai thác cùng với một vụ làm tràn bộ nhớ đệm. Những kỹ thuật hacker thường dùng để truy cập trái phép (Hacking Techniques for Unauthorized Access), hacker có thể làm tràn bộ nhớ đệm như là một mánh khóe để ép máy tính phải chạy một chương trình bất hảo. Tuy nhiên, kiểu truy xuất này nói chung là khó dùng, bởi vì làm tràn bộ nhớ đệm thường sẽ làm cho máy tính sụm luôn. Như đã giải thích ở phía trước, đoạn chương trình làm tràn sẽ nạp đầy vào một đoạn bộ nhớ đã được xác định trước, sau đó sẽ làm tràn vùng nhớ bên trên, như thế sẽ ghi đè lên dữ liệu của các biến bộ nhớ khác. Lúc đó, nếu có một chương trình nào cần lấy dữ liệu, sẽ đi truy xuất đúng vào các biến bộ nhớ đã bị ghi đè, thế là chương trình “tưng” luôn, và thường là sẽ kéo theo cả máy tính “tưng” luôn cùng với nó.

Các vụ tấn công DoS là mối đe dọa không chỉ đối với các công ty, doanh nghiệp lớn, mà cả đối với các văn phòng nhỏ và người dùng tại nhà. Hiện có sẵn hằng hà sa số các chương trình có thể cho bất kỳ ai khả năng làm tràn một mục tiêu. Chỉ một cái click chuột đơn giản là có thể đổ ầm ầm hàng trăm gói tin SYN xuống thẳng đầu nạn nhân. Nếu bạn nghi là bị tấn công bằng kiểu từ chối dịch vụ, bạn có thể dùng tool NETSTAT để xác định có bị tấn công hay không. Dùng tool này sẽ thấy hiện lên rõ ràng vụ tấn công nếu có. Trong hình dưới trình bày một kết quả của tool NETSTAT cho thấy có một cuộc tấn công SYN. Các dòng ở cột State cho thấy rất rõ hiện đang có một vụ tấn công SYN diễn ra ngầm bên dưới.

SYN_RECV

Ảnh 4 : Các kết nối Internet hiện có (kể cả các server)

Như bạn cũng có thể thấy, các cuộc tấn công DoS cũng không đến nỗi phức tạp lắm. Vì rằng, một hacker có thể dễ dàng tìm được các chương trình tấn công có sẵn, cho nên các cuộc tấn công này cũng đâm ra rất phổ biến. Đến đây có thể bạn sẽ hỏi, “Làm sao để ta có thể ngăn chận các cuộc tấn công DoS?”. Thật đáng tiếc là đến nay cũng chưa thể ngăn chận triệt để các cuộc tấn công như thế.

Vì rằng các cuộc tấn công này dựa trên nguyên lý cơ sở để các máy tính xây dựng nên các liên lạc với nhau, cho nên cách duy nhất để chấm dứt những chuyện bậy bạ này là đi sáng chế ra lại một Internet mới. Đến nay cách thức thực tế duy nhất để làm giảm bớt các cuộc tấn công như vậy là chặn (block) tất cả các traffic đến từ một số vùng đặc biệt của Internet. Dù sao, như chúng tôi đã giải thích, các hacker thường có rất nhiều máy tính nô lệ, thường nằm trong các mạng của các trường đại học hay của các công ty. Nếu một server cấm cửa đối với một địa chỉ rõ ràng đã gây ra vụ tấn công, cũng đồng nghĩa là server này cấm mọi người ở hướng đó truy cập mình. Điều này sẽ giống như đặt một chế độ kiểm dịch lên toàn thành phố chỉ vì một người duy nhất trong thành phố bị bệnh thủy đậu.