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ệ
Trang 1for (int bx=0; bx<256; bx++){
int eax=0;
eax=eax&0xFFFFFF00+bx&0xFF; // the 'mov al,bl' instruction for (int cx=0; cx<8; cx++){
if (eax&&0x1) {
eax>>=1;
eax^=poly;
}
else eax>>=1;
}
crctable[bx]=eax;
}
The implementation for computing CRC-32 using the table:
computeLoop:
xor ebx, ebx
xor al, [si]
mov bl, al
shr eax, 8
xor eax, dword ptr[4*ebx+crctable]
inc si
loop computeLoop
xor eax, 0FFFFFFFFh
Notes: - ds:si points to the buffer where the bytes to process are
- cx contains the number of bytes to process
- eax contains current CRC
- crctable is the table computed with the code above
- the initial value of the CRC is in the case of CRC-32: FFFFFFFF
- after complete calculation the CRC is XORred with: FFFFFFFF which is the same as NOTting
In Java or C it is like this:
for (int cx=0; cx>=8;
eax^=crcTable[ebx];
}
eax^=0xFFFFFFFF;
Trang 2Cuối cùng bây giờ chúng ta cũng đã đi đến phần cuối của phần một : The CRC tutorial.Nếu bạn muốn tìm hiểu sâu hơn nữa về CRC tôi khuyên bạn nên tìm đọc thêm các tài liệu mà tác giả đã khuyến cáo sau đây :
Quote:
References
> A painless guide to CRC error detection algorithm
ftp://ftp.adelaide.edu.au/pub/rocksoft/crc_v3.txt
(I bet this 'painless guide' is more painfull then my 'short' one ;)
> I also used a random source of a CRC-32 algorithm to understand the algorithm better
> Link to crc calculation progs hmmm search for 'CRC.ZIP' or 'CRC.EXE' or something
alike at ftpsearch (http://ftpsearch.lycos.com?form=advanced)
Trong phần sau chúng ta sẽ đến phần 2 không kém phần hấp dẫn : Reversing CRC! Ok Hẹn trong tut sau Thanx ( Sorry nếu như có chỗ tôi dịch chưa sát nghĩa lắm)
Kienmanowar(REA)
Encrypting data with the Blowfish algorithm
Ặ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
Trang 3tượ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
Trang 4Ở đâ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
Trang 5muố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
Đến đây thì hết phần giới thiệu, phần sao sẽ “chua” hơn phần này
Benina 2004
Patch: Add CRC32C chksums to crypto routines
Linux Code:
Trang 6This patch against 2.6.1 adds CRC32C checksumming capabilities to the