Trao đổi với tôi

http://www.buidao.com

3/21/10

[Crypto] Mã hoá thông tin bằng thuật giải Blowfish

===========================================================================
Ặc ặc, keke.
(Đó là những từ cảm thán mà tui học được trên NET. Tui yêu NET và con người ảo của NET ở chổ này . hihi. )
Gác kiếm đã lâu đang ngâm trầm cái khác, híhí , bài này cũng đã viết lâu rồi (từ lúc mới wen NINI trên NET có send cho ẻm đọan vào đề :) ). Hôm nay lục ra ,thấy cũng giống như một bài luận nên post cho các bạn xem chơi. Đọan analysis thuật tóan và cracking cắt bỏ. Mong các bạn thông cảm vì em đã ....lỡ dại ...gác rồi

==========================================================================

VÀO ĐỀ:

Lúc bé, tui thường ở nhà với bà nội , vì mẹ tôi phải đi dạy học xa. Và tui là một trong những đứa cháu nội được yêu thương nhất . Bà nội tui lúc nào cũng muốn những điều tốt lành cho tôi. Bà thường mong muốn: Nếu lớn lên tôi sẽ được làm nghề “gỏ dây thép”, vì nghề này chỉ ngồi ở trong mát lại lương cao.Và ngày hôm nay khi nghiên cứu về mã hóa bổng tôi rất nhớ đến bà. TUT này ngòai việc chia sẽ cho các bạn, tui cũng muốn gởi tặng linh hồn Nội tôi. Rất rất nhớ bà !!!.huhu

Thưa các bạn, thật ra viết tut ko cần dài dòng như benina hay làm. Nhưng vì đối tượng đọc tut mà benina muốn share là các newbie như benina vậy. Thật là vất vả cho newbie khi trên các diễn đàn cracker tiếng Việt chưa nhiều tài liệu hướng dẫn cụ thể. Và thường , các newbie ko biết bắt đầu từ đâu . Vì vậy bắt buộc benina biết gì thì sẽ share ngay cho các bạn. Thật là vui vẽ khi chúng ta cùng tiến bộ.

Như trên tui có nói, bà nội tui rất thích nghề “gỏ dây thép”. Vì những năm 60, kỹ thuật còn lạc hậu so với bây giờ, nghề “gỏ dây thép” rất sang trọng, là một nghề “ngồi mát ăn bát vàng”. Nghề này chỉ có làm một việc là nhận 1 message text (như thư từ chẳng hạn), sau đó chuyển thông tin text đó thành 1 chuổi mật mã 0,1 theo một quy luật gọi là khóa “Key” và rồi “gỏ” tín hiệu 0,1 đó bằng 1 công cụ đặc biệt để chuyển đi bằng sóng điện từ (nên được gọi là gỏ dây thép). Người nhận tín hiệu bên kia ghi lại chuổi mã hóa 0,1 và dựa vào khóa “key” qui định mà chuyển ra tín hiệu text. Đấy là qui trình chuyển 1 tín hiệu mã hóa. Ví dụ này để các bạn dể hình dung ra cách mã hóa tin hiệu text như thế nào và nó cũng là một ví dụ thật “thô sơ” cho thuật tóan mã hóa Blowfish.


GIỚI THIỆU VÀ THUẬT NGỮ


Trong chu trình mã hóa, plaintext là tín hiệu mà bạn chuyển đi. Tín hiệu này có thể là một bản báo cáo kiểm tra sức khỏe, một bức thư tình…. Hay một cái gì đó mà nó có thể được diễn tả ra thành một luồng bits. Quá trình mã hóa là biến tín hiệu plaintext thành ciphertext (văn bản đã mã hóa), và quá trình giải mã thì ngược lại chuyển ciphertext thành plaintext
Thông thường người ta hay nói rằng, thuật tóan mã hóa có 2 lọai , symmetric (đối xứng) và public (công khai). Thuật tóan đối xứng như Blowfish chẳng hạn , dùng khóa bí mật giống nhau (same secret key) để mã hóa và giải mã. Bạn phải giấu key một cách bí mật chỉ cho người nhận và gởi tín hiệu biết mà thôi. Ví dụ như chúng ta thường sử dụng một password trong IT,thì chỉ có người nhận và người gởi biết mà thôi.

Thuật tóan mã hóa khóa công khai (public) là dùng 2 key, một cho mã hóa, khóa kia cho giải mã. Khóa được dùng cho mã hóa gọi là “public key” (khóa công khai) không cần giữ bí mật. Người gởi tín hiệu dùng khóa này để gởi tín hiệu của họ. và người nhận tín hiệu dùng khóa giải mã bí mật hay còn gọi là “private key” (khóa riêng) để đọc tín hiệu nhận được. Khóa public key nó “locks” tín hiệu, còn khóa private key thì “unclocks” tín hiệu: một tín hiệu được mã hóa bằng public key, thì ko ai ngọai trừ người giữ khóa private key có thể giải mã được tín hiệu. RSA là một thuật tóan mã hóa public key thông dụng.

Ở đây tui xin lấy một ví dụ để mô tả kiểu mã hóa key public và symmetric như sau (ko biết đúng ko nhe nhưng dễ hình dung,hihi). Nếu các bạn nào có đi du lịch ở khách sạn, hay gia đình khá giả chắc các bạn sẽ biết và đã từng xem truyền hình cáp. Thực ra nó cũng giống như lọai truyền hình bình thường, không phải nối cáp từ đài phát hình đến truyền hình của ta như là cái tên của nó dễ làm ta nhằm lẩn. Nó chỉ khác ở chổ, truyền hình bình thường, các bạn cứ tường tượng tín hiệu của nó là lọai tín hiệu được mã hóa đối xứng, tức là tín hiệu hình ảnh được mã hóa bằng một chuổi tín hiệu được truyền qua sóng điện từ đến truyền hình của ta. Lúc đó truyền hình sẽ giải mã chuổi tín hiệu đó thành hình ảnh bằng 1 khóa giống nhau (same secret key) khi mã hóa và giải mã. Đây là lọai mã hóa đối xứng symmetric . Còn truyền hình cáp thì khác, đài phát hình sẽ mã hóa hình ảnh bằng một khóa “public key” mà tất cả các ăn-ten truyền hình nào cũng nhận được. Nhưng bạn phải có một đầu giải mả tín hiệu (hình dáng giống như một cái đầu máy DVD), có nhiệm vụ giải mã tín hiệu truyền hình đã mã hóa thành tín hiệu hình ảnh thông qua một khóa riêng “private key” kết hợp với khóa “public key” để giải mả. Đó chính là lọai thuật tóan mã hóa công khai.

Vậy muốn giải mã một tín hiệu mã hóa bằng thuật tóan symmetric ta phải biết khóa “same secret key” . Và muốn giải mã một tín hiệu mã hóa bằng thuật tóan public key chúng ta bắt buộc phải biết khóa “private key”

Ngòai ví dụ trên, các thuật tóan mã hóa còn được sử dụng rất nhiều trong thực tế như : tín hiệu điện thọai di động, hay một vi chương trình cập nhật nâng cấp mà chúng ta thường thấy ,nó sẽ gởi 1 tín hiệu về trang chủ của soft để báo có cần nâng cấp soft ko khi có 1 bản upgrade mới,hoặc được sử dụng trong Embedded systems, vân..vân...nhiều lắm.

Phần lớn thuật tóan đáng tin cậy nhất đã được xuất bản free để cho phân tích (analysis) thỏai mái, bởi vì khóa bảo mật của chúng được sử dụng trong thực tế kiểm chứng rất an tòan. Một thuật tóan tốt nó giống như “ một cái hầm chứa tiền của nhà băng ”: Cái hầm này được làm rất hòan chỉnh , nó là lọai tốt nhất , bạn ko thể vào bên trong hầm mà ko có khóa. Blowfish chính là thuật tóan lọai này, nó rất đáng tin cậy đã được public công khai.

Đôi khi một thuật tóan mã hóa bị giới hạn ko free, có nghĩa là chính thuật tóan này được giử bí mật. Chính vì vậy bạn sẽ ko bao giờ biết chắc rằng thuật tóan bị giới hạn đó thật sự yếu kém như thế nào, bởi vì người phát triển ko cho bất cứ ai một cơ hội để phân tích nó.

Thuật tóan có thể được sử dụng bảo mật những lọai dữ liệu khác nhau. Đôi khi bạn muốn dữ liệu được “tòan vẹn” khi gởi đi, và tin chắc rằng người nhận sẽ nhận được những thông tin giống đúng như bạn đã gởi,lúc đó bạn cũng phải sử dụng đến thuật tóan mã hóa. Thuật tóan mã hóa cũng cung cấp những “xác nhận”, cho biết chắc rằng một tín hiệu đến từ một người nào đó đã gởi nó đến ....đó là một vài mục đích sử dụng của thuật tóan mã hóa .Một ứng dụng nữa của các thuật tóan mã hóa nói chung và Blowfish nói riêng là bảo mật phần mềm , ko cho các cracker chôm chỉa. Nó sẽ mã hóa chuổi password (là plaintext) thành chuổi mã hóa ciphertext. Và sao đó sẽ xử lý chuổi ciphertext này

Trên đây là những giới thiệu sơ khởi về thuật tóan mã hóa và các ứng dụng của nó trong thực tế nhằm mục đích khởi xứng cho việc ứng dụng vào cracking mà chúng ta quan tâm . Tui xin tóm tắt lại các ý chính trên để chúng ta bắt đầu đi vào phần chính của vấn đề là phân tích thuật tóan Blowfish và ứng dụng trong cracking như thế nào:

-plaintext là tín hiệu mà bạn chuyển đi
-Ciphertext: tín hiệu mã hóa
-Thuật tóan mã hóa có 2 lọai , symmetric (đối xứng) và public (công khai)
- Thuật tóan đối xứng (symmetric) như Blowfish chẳng hạn , dùng khóa bí mật giống nhau (same secret key) để mã hóa và giải mã
- Thuật tóan mã hóa khóa công khai (public) là dùng 2 key, một cho mã hóa, khóa kia cho giải mã. Khóa được dùng cho mã hóa gọi là “public key” (khóa công khai) không cần giữ bí mật.Khóa được dùng cho giải mã là “private key” (khóa riêng). RSA là một thuật tóan mã hóa public key thông dụng
- Vậy muốn giải mã một tín hiệu mã hóa bằng thuật tóan symmetric ta phải biết khóa “same secret key” . Và muốn giải mã một tín hiệu mã hóa bằng thuật tóan public key chúng ta bắt buộc phải biết khóa “private key”
-Encryption algorithm thuật tóan mã hóa ở đây khác thuật tóan hash chuổi MD5 là: Thuật tóan mã hóa sẽ mã hóa ra 1 Ciphertext và có thể giải mã ngược lại 1 ciphertext thành 1 plaintext. Còn thuật tóan MD5 thì sẽ hash chuổi thành 1 tín hiệu MD nhưng ko thể biến đổi từ 1 chuổi MD về tín hiệu gốc.

Benina 2004