Hướng dẫn dùng ripemd 256 trong PHP

Báo cáo nghiên cứu – Cài đặt Thuật toán RIPEMD – Khoa An toàn Thông tin – Học viện Kỹ thuật Mật mã

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản khá đầy đủ của tài liệu tại đây ( 445.58 KB, 25 trang )
Bạn đang đọc : Cài đặt Thuật toán RIPEMD

HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN

BÁO CÁO BÀI TẬP LỚN MÔN HỌC
MẬT MÃ HỌC NÂNG CAO
Chủ đề số 20
CÀI ĐẶT THUẬT TOÁN RIPEMD
Giảng Viên: TS.Trần Tuấn Anh
Thực hiện: Sinh viên AT8C
1. Lê Xuân Đoàn
2. Bùi Đức Thiện
1
Ý KIẾN GIẢNG VIÊN

MỤC LỤC
2
LỜI NÓI ĐẦU
Ngày nay với việc ứng dụng của công nghệ thông tin càng ngày càng phổ biến rộng
rãi ảnh hưởng rất lớn đến diện mạo của đời sống kinh tế xã hội. Mọi công việc hàng
ngày của chúng ta đều có thể thực hiện với sự hỗ trợ của máy vi tính và mạng
internet(từ học tập giao dịch …) và máy tính và internet đã trở thành một phần khó có
thể tách rời với nhịp sống hiện đại ngày nay. Nhưng một vấn đề khó đặt ra là làm sao
để giữ được bí mật thông tin cho đến khi chúng đến nơi mà chúng cần đến. Nhiều tổ
chức cá nhân đã tìm kiếm và đưa ra giải pháp bảo mật phương pháp mã hóa khá cao.
Như vậy mã hóa thông tin sẽ đảm bào cho thông tin tránh bị thay đổi hoặc sao chép.
Trong bài nghiên cứu này nhóm sẽ trình bày về vấn đề mã hóa thông tin sử dụng hàm
băm, tìm hiểu tổng quan về hàm băm và đi sâu tìm hiểu phân tích thiết kế cài đặt thuật
toán mã hóa RIPEMD
3
CHƯƠNG 1
HÀM BĂM MẬT MÃ
1.1 Tổng quan về hàm băm mật mã

Hiểu theo nghĩa đơn giản, hàm băm là hàm cho tương ứng một mảng dữ liệu
lớn với một mảng dữ liệu nhỏ hơn mà được dùng rộng rãi trong nhiều ứng dụng
tin học, không chỉ thuộc phạm vi mật mã. Ở đây, chúng ta chỉ xét đến các hàm
băm trong phạm vi các hàm băm mật mã, xem xét cụ thể đến các ứng dụng của
chúng trong việc đảm bảo tính toàn vẹn của dữ liệu.
Các hàm băm nhận đầu vào là một chuỗi bit có chiều dài hữu hạn tùy ý và
tạo ra một chuỗi bit có chiều dài cố định bằng n bit (n > 0) gọi là mã băm (hash
code).
Trong mã hóa, mã băm được xem như là ảnh đại diện thu gọn (compact
representative image) của một chuỗi bit có độ dài hữu hạn tùy ý và được dùng
để nhận diện cho chuỗi bit đó. Kết hợp với công cụ tạo chữ ký số, các hàm băm
được dùng cho việc đảm bảo tính toàn vẹn của dữ liệu. Trong lược đồ chữ ký số,
mã băm của chuỗi bit được tính ở thời điểm T
1
và được bảo vệ để chống lại mọi
sự thay đổi bất hợp pháp. Tại thời điểm T
2
sau đó, để kiểm tra xem chuỗi bit x có
bị thay đổi hay không, người ta thường tính giá trị hàm băm của chuổi bit này tại
thời điểm T
2
, mà ta ký hiệu là x
T2
, sau đó so sánh giá trị vừa tính với mã băm tại
thời điểm T1. Nếu 2 giá trị bằng nhau thì người ta chấp nhận chuổi bit tại thời
điểm T2 trùng khớp với chuổi bit tại thời điểm T1, tức chuỗi bit x vẫn chưa bị thay
đổi. Như vậy vấn đề bảo đảm tính toàn vẹn của chuỗi bit có chiều dài tùy ý được
thay bằng việc bảo vệ sự toàn vẹn của chuỗi bit có chiều dài cố định.
1.2 Định nghĩa tổng quát của hàm băm
Hàm h(x) được gọi là một hàm băm nếu nó thoả mãn hai tính chất sau:

4
• Nén gọn (Compression): Hàm h(x) tương ứng chuỗi bit đầu vào x
có chiều dài hữu hạn tuỳ ý vào chuỗi bit y = h(x) có chiều dài cố định
n >0 cho trước.
• Dễ tính toán (Easy of computation): Với mọi chuỗi bit đầu vào x
có chiều dài hữu hạn tuỳ ý, h(x) được tính toán dễ dàng.
1.3 Các tính chất của hàm băm mật mã
Một hàm băm mật mã lý tưởng có các tính chất sau :
1.3.1 Tính kháng tiền ảnh (Preimage resistance)
Với mọi đầu ra y cho trước, không thể tìm được bất kỳ dữ liệu đầu vào x sao
cho h(x) = y (hay không thể tìm được một thông điệp từ một giá trị băm cho trước).
1.3.2 Tính kháng tiền ảnh thứ hai (2
nd
– Preimage resistance)
Với mọi dữ liệu đầu vào x cho trước và y = h(x), không thể tính toán để tìm ra
được giá trị x’ x sao cho h(x’)=h(x) (hay không thể tìm ra 2 thông điệp khác nhau
mà có cùng giá trị băm).
1.3.3 Tính kháng xung đột (Collision resistance)
Không thể tính toán để tìm được hai dữ liệu đầu vào x và x’ phân biệt sao cho
chúng có cùng giá trị băm h(x)=h(x’) (hay không thể sửa được một thông điệp mà
không làm thay đổi giá trị băm của nó).
1.4 Phân loại hàm băm mật mã
Dựa trên tham biến đầu vào của các hàm băm, các hàm băm mật mã được
phân thành hai lớp:
 Lớp các hàm băm sử dụng khoá (keyed hash functions), chẳng hạn như
MAC (Message Authentication Codes): nhận hai giá trị đầu vào
o Thông điệp cần tính giá trị băm
o Khoá bí mật để băm văn bản theo đúng chuẩn quy định
 Lớp các hàm băm không sử dụng khoá (unkeyed hash functions): chỉ
nhận duy nhất một giá trị đầu vào là Thông điệp (message).

Trong lớp các hàm băm không sử dụng khoá thì MDCs (Modification
Detection Codes – mã nhận diện sự thay đổi) là lớp con của lớp này. Lớp hàm
này lại tiếp tục phân thành các lớp con nhỏ hơn
5
– Hàm băm một chiều (One-Way Hash Functions – OWHFs): các
hàm trong lớp này đều thoã tính chất là với mọi mã băm biết trước, không
thể tính toán để tìm được chuỗi bit đầu vào có mã băm bằng với mã băm
đã cho.
– Hàm băm kháng xung đột (Collision Resistant Hash Functions –
CRHFs): các hàm trong lớp này thoã mãn tính chất không thể tính
toán để tìm ra hai chuỗi bit có cùng giá trị băm.
1.5 Cấu trúc của thuật toán hàm băm
Khối dữ liệu đầu vào x có chiều dài tuỳ ý sẽ được phân thành các khối con liên
tiếp x1, x2, …, xm (với xi có chiều dài cố định là r). Tuy nhiên do chiều dài khối ban
đầu là tùy ý nên ta cần thêm vào dữ liệu ban đầu một số bit phụ sao cho tổng số bit
của khối dữ liệu x sau khi thêm vào sẽ là bội số của r. Ngoài ra số bit phụ thêm vào
thường chứa một khối bit xác định chiều dài thực sự của khối dữ liệu khi chưa thêm
các bit phụ. Sau đó ta lần lượt cắt từng khối con r bit từ khối x.
Mỗi khối con r bit xi ta thực hiện một hàm nén của hàm băm h(x) được ký hiệu
là f. Tại bước thứ i, hàm nến f nhận dữ liệu đầu vào là xi và kết quả trung gian của
bước trước đó để tạo đầu ra là kết quả trung gian bước thứ i, ký hiệu là Hi. Kết quả
trung gian tại mỗi bước Hi là một chuổi bit có độ dài cố định bằng n>0. Nếu ký hiệu
IV (init value) là giá trị khởi tạo ban đầu cho H0, thì quá trình lặp xử lý dãy các khối
con x1,x2,…, xm được mô tả như sau:
H
0
=IV
H
1
= f(H

i-1,
x
i
), (i=1,…,m)
h(x) = g(H
m
)
H
i
là kết quả trung gian sau bước thứ i, là các biến dây chuyền. Hàm g(x)
ánh xạ biến dây chuyền cuối cùng để tạo ra mã băm kết quả. Và thông thường,
g(x) được chọn là ánh xạ đồng nhất: g(H
m
)
o
H
m
. Khâu then chốt trong xây dựng
hàm băm là thiết kế hàm nén f.
6
1.6 Ứng dụng của hàm băm mật mã
Một ứng dụng điển hình của một hàm băm mật mã học như sau: Alice đưa cho
Bob một câu đố khó và tuyên bố rằng cô ấy đã giải được rồi. Bob muốn tự giải,
nhưng cũng muốn chắc chắn là Alice đúng là đã giải được. Do đó, Alice viết đáp án,
gắn thêm một nonce ngẫu nhiên, tính giá trị băm của nó, và đưa kết quả băm cho Bob
(trong khi vẫn giữ bí mật đáp án và nonce). Bằng cách này, khi Bob tự giải xong,
Alice có thể chứng minh rằng cô đã có đáp án từ trước bằng cách đưa nonce cho
Bob. Trong thực tiễn, Alice và Bob thường là các chương trình máy tính, và bí mật
thường là cái gì đó không dễ lừa bằng một lời giải cho câu đó. Ứng dụng trên được
gọi là một hệ thống tin cậy (commitment scheme).

Một ứng dụng quan trọng khác của các hàm băm bảo mật là sự kiểm tra tính
toàn vẹn của thông điệp. Ví dụ, việc xác định xem một file hay một thông điệp có bị
sửa đổi hay không có thể thực hiện bằng cách so sánh tóm tắt được tính trước và sau
khi gửi (hoặc một sự kiện bất kỳ nào đó). Còn có thể dùng tóm tắt thông điệp làm
một phương tiện đáng tin cậy cho việc nhận dạng file.
Một ứng dụng có liên quan là kiểm tra mật khẩu. Mật khẩu thường khôngđược
lưu dưới dạng văn bản rõ (clear text), mà ở dạng tóm tắt. Để xác thực một người
dùng, mật khẩu do người đó nhập vào được băm và so sánh với kết quả băm được
lưu trữ.
Do các lý do cả về bảo mật và hiệu năng chương trình, đa số các thuật toán
chữ ký số nói rằng chỉ có tóm lược của thông điệp, chứ không phải toàn văn thông
điệp, được “ký”. Các hàm băm còn có thể được dùng để tạo các bit giả ngẫu nhiên
(pseudorandom).
1.7 Các hàm băm mật mã hiện nay
Trong danh sách dài các hàm băm mật mã dưới đây, có một số hàm băm được
cho là dễ bị tổn thương và không nên sử dụng. Ngay cả khi một hàm băm chưa bị
phá vỡ, một tấn công thành công đối với một biến thể yếu đó có thể làm giảm sự tự
tin của các chuyên gia và dẫn đến loại bỏ nó. Ví dụ, vào tháng 8 năm 2004 người ta
đã tìm ra những điểm yếu của một vài hàm băm phổ biến vào thời đó, bao gồm SHA-
0, RIPEMD, và MD5. Điều này đã đặt ra câu hỏi an ninh lâu dài của các thuật
toán sau này được bắt nguồn từ những hàm băm này – đặc biệt, SHA-1 (một phiên
7
bản mạnh của SHA-0), RIPEMD-128, và RIPEMD-160 (cả hai phiên bản mạnh của
RIPEMD). Vì vậy, cả SHA-0 và RIPEMD đều không được sử dụng rộng rãi kể từ
khi chúng được thay thế bởi các phiên bản mạnh.
Thuật toán Kích thước đầu ra Kíc
h
thước
trạng
thái

Xem thêm : Nuanced là gì

trong
Kích
thước
khối
Thông
điệp tối
đa
Kích
thước
word
Xung
đột
HAVAL 256/224/192/160/12
8
256 1024 64 32 Có
MD2 128 384 128 No 8
Kh

năng
lớn
MD4 128 128 512 64 32 Có
MD5 128 128 512 64 32 Có
PANAMA 256 8736 256 No 32 Có lỗi
RIPEMD 128 128 512 64 32 Có
RIPEMD-
128/256
128/256 128 512 64 32 Khôn
g
RIPEMD-
160/320

160/320 160/320 512 64 32 Khôn
g
SHA-0 160 160 512 64 32 Có
8
Bảng 1: Các hàm băm mật mã
9
CHƯƠNG 2
HÀM BĂM RIPEMD
2.1 Tổng quan về hàm băm RIPEMD
RIPEMD (RACE Integrity Primitives Evaluation Message Digest) là một họ
của hàm băm mật mã được phát triển ở Leuven- Bỉ bởi Hans Dobbertin, Antoon
Bosselaers và Bart Preneel tại nhóm nghiên cứu COSIC tại Katholieke Universiteit
Leuven và lần đầu tiên được xuất bản vào năm 1996. RIPEMD được dựa trên các
nguyên tắc thiết kế được sử dụng trong MD4, nhưng hiệu năng hoạt động phổ biến
hơn MD4
2.2 RIPEMD-128
RIPEMD – 128 là một hàm băm 128 -bit sử dụng xây dựng như mở rộng của
Thuật toán Merkle Damgard : hàm băm được xây dựng bằng cách duyệt một chức
năng nén 128 -bit mà mất như một đầu vào 512 -bit với đẩu ra là 128 bit.
Các chức năng nén RIPEMD – 128 dựa trên MD4, với các đặc thù mà nó sử
dụng hai trường hợp song song của nó, Chúng ta phân biệt hai chi nhánh tính toán của
nhánh trái và nhánh phải và chúng ta hiển thị bởi X
i
(resp. Y
i
) 32 bit của nhánh trái
(resp. right branch).Quá trình này sẽ được cập nhật trong bước i của hàm nén .Quá
trình này bao gồm 64 bước chia thành 4 vòng 16 bước từng ở cả hai chi nhánh cụ thể
về quá trình:
Khởi tạo: Các đầu vào 128 -bit chuỗi cv

i
biến được chia thành 4 từ h
i
mỗi 32 bit, sẽ
sử dụng để khởi tạo các nhánh trái và phải 128 -bit trạng thái nội bộ :
10
Mở rộng tin: Khối tin đầu vào 512 -bit được chia thành 16 từ Mi của mỗi 32 bit. mỗi
từ Mi sẽ được sử dụng một lần trong mỗi vòng theo một thứ tự hoán vị ( tương tự như
MD4 ) và cho cả 2 nhánh.
Chức năng của từng bước: Tại mỗi bước i ,sổ đăng ký X
i+1
và Y
i+1
được cập nhật
với các chức năng f
1
j
và f
r
j
điều đó phụ thuộc vào những vòng j trong mà i thuộc về:
Kết thúc quá trình: Một quyết toán và một feed-forward được áp dụng khi tất cả 64
bước đã được tính toán trong cả 2 chi nhánh. Bốn 32 -bit từ h
i

soạn ra chuỗi biến cuối
cùng đã thu được bằng cách :
2.3 RIPEMD-160
RIPEMD-160 là một hàm băm mật mã 160-bit, được thiết kế bởi Hans Dobbertin ,
Antoon Bosselaers và Bart Preneel. Nó được thiết kế để sử dụng như là một thay thế

an toàn cho các hàm băm 128-bit MD4, MD5 và RIPEMD. MD4 và MD5 được phát
triển bởi Ron Rivest cho RSA Data Security, trong khi RIPEMD được phát triển trong
khuôn khổ của dự án RIPE EU ( RACE Integrity Primitives Evaluation, 1988-1992 ) .
Có ba lý chính để xem đây là một sự thay đổi tốt :
• Một kết quả băm 128 -bit không cung cấp đủ bảo vệ nữa, một cuộc tấn công
brute force vào hàm 128 bit chỉ đòi hỏi 2
64
hoặc 2.10
19
giá trị của hàm. Năm
1994 Paul van Oorschot và Mike Wiener cho thấy việc brute- lực lượng này có
thể được thực hiện trong vòng chưa đầy một tháng với một khoản đầu tư $
10.000.000
• Trong nửa đầu năm 1995 Hans Dobbertin tìm thấy va chạm đối với một phiên
bản của RIPEMD hạn chế đến hai vòng cùng của ba .Sử dụng kỹ thuật tương tự
được sản xuất Hans vào mùa thu năm 1995 cho các va chạm (tất cả 3 vòng )
11
MD4. Cuộc tấn công vào MD4 chỉ đòi hỏi một vài giây trên một máy tính, và
vẫn còn để lại một ít tự do để lựa chọn các tin nhắn, cầm quyền rõ ràng ra MD4
như là một hàm băm kháng va chạm. Ngay sau đó, vào mùa xuân năm 1996,
Hans cũng tìm thấy va chạm cho các chức năng nén MD5. Mặc dù chưa được
mở rộng đến va chạm với MD5 bản thân, cuộc tấn công này phôi nghi ngờ
nghiêm trọng về sức mạnh của MD5 là một vụ va chạm
• Crypto 2004 Xiaoyun Wang, Dengguo Feng, Xuejia Lai và Hongbo Yu tìm
thấy sự xung đột trong: MD4, MD5, RIPEMD, and the 128-bit version of
HAVAL.
RIPEMD – 160 là một phiên bản được tăng cường của RIPEMD với một kết
quả băm 160 -bit, và dự kiến sẽ được an toàn trong mười năm tới hoặc hơn. Triết lý
thiết kế là xây dựng càng nhiều càng tốt về kinh nghiệm thu được bằng cách đánh giá
MD4, MD5, và RIPEMD. Giống như người tiền nhiệm của nó, RIPEMD – 160

được điều chỉnh cho bộ vi xử lý 32 -bit, mà chúng ta cảm thấy sẽ vẫn quan trọng
trong thập kỷ tới .
RIPEMD – 256 và RIPEMD – 320 là phần mở rộng tùy chọn tương ứng cho
RIPEMD – 128 và RIPEMD – 160, và được dành cho các ứng dụng của các hàm băm
mà đòi hỏi một kết quả hash lâu hơn mà không cần một mức độ bảo mật lớn hơn
12
CHƯƠNG 3
PHÂN TÍCH THIẾT KẾ VÀ CÀI ĐẶT RIPEMD
3.1 Phân tích
hình 3.1 Sơ đồ thuật toán
Mô tả thuật toán
13
Input : Thông điệp (văn bản) có độ dài tùy ý
Ouput: Bản băm,đại diện cho văn bản gốc,độ dài cố định ( phụ thuộc vào thuật toán
RIPEMD mà bản băm có kích thước 128 bit,160 bit,256 bit,320 bit).
Giả sử thông điệp đầu vào là a có độ dài b ( b có thể bằng 0)
Phân tích thuật toán RIPEMD-160
RIPEMD-160 nén một chuỗi đầu vào kích thước tùy ý bằng cách chia thành
khối của mỗi 512 bit. Mỗi khối được chia thành 16 chuỗi 4 byte mỗi,và mỗi chuỗi 4-
byte đó được chuyển đổi thành một từ 32-bit
Để đảm bảo rằng kích thước tổng số đầu vào là một bội số của 512 bit,đầu vào
được đệm thêm chuỗi n các số 0 ( 0 < n < 511) .Thông điệp đầu vào sẽ được xử lí qua
5 vòng song song .Kết quả của RIPEMD-160 được chứa trong 5 từ 32 bit
Hoạt động của thuật toán
1 :
A := (A + f (B; C; D) + X + K
)<+E
C:= C
<<10 Ở đây
< biểu thị sự thay đổi theo chu kì (xoay) theo vị trí s trên bit
2 :
Thứ tự của các tin nhắn,theo hoán vị sau
Xác định rõ hơn các hoán vị π bằng cách thiết lập π (i) = 9i + 5 (mod 16). Thứ tự của
các thông điệp được cho bởi bảng sau:
14
Các hàm Logic được xác định như sau
Các hàm Logic được áp dụng như sau
4 :
Những thay đổi

5 :
15
Các hằng số
Phân tích thuật toán RIPEMD-128
RIPEMD-128 có 1 vài sự thay đổi đối với RIPEMD-160
Thông điệp đầu vào sẽ được xử lí qua 4 vòng song song .Kết quả của RIPEMD-
128 được chứa trong 4 từ 32 bit
1:
A := (A + f (B; C; D) + X + K)
<2: Hàm Logic
3: Hằng số
3.2 Thiết kế
1: Khai báo giá trị các thanh ghi dùng trong xử lí
Mỗi thanh ghi có độ dài 32 bit,các thanh ghi này được khởi tạo bằng giá trị hecxa
RIPEMD -160
dword AA = AAA = 0x67452301UL;

dword BB = BBB = 0xefcdab89UL;
16
dword CC = CCC = 0x98badcfeUL;
dword DD = DDD = 0x10325476UL;
dword EE = EEE = 0xc3d2e1f0UL;
RIPEMD-128
dword AA = AAA = 0x67452301UL;
dword BB = BBB = 0xefcdab89UL;
dword CC = CCC = 0x98badcfeUL;
dword DD =DDD = 0x10325476UL;
2: Xây dựng các vòng xử lí chuỗi đầu vào
RIPEMD-160 : Gồm 5 vòng song song (file : rmd160.h source code)
RIPEMD-128 : Gồm 4 vòng song song (file : rmd128.h source code)
3: Xây dựng hàm xử lí băm chuỗi của mỗi thuật toán
RIPEMD-160(file : rmd160.c source code)
RIPEMD-128(file rmd128.c source code)
4: Xây dựng các hàm băm file,băm chuỗi,và kiểm tra hiệu suất thuật toán
( hashtest.c source code)
5:Chạy chương trình cài đặt
17
RIPEMD-160
RIPEMD-128
18
3.3 Cài đặt
– Sử dụng ngôn ngữ lập trình C ,viết mã trên phần mềm C-free
Kết quả băm 1 vài thử nghiệm
RIPEMD-160:
“”
19
9c1185a5c5e9fc54612808977ee8f548b2258d31

“a”
0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
“abc”
8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
“message digest”
5d0689ef49d2fae572b881b123a85ffa21595f36
“abcdefghijklmnopqrstuvwxyz”
f71c27109c692c1b56bbdceb5b9d2865b3708dbc
“abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq”
12a053384a9c0c88e405a06c27dcf49ada62eb2b
“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
9″
b0e20b6e3116640286ed3a87a5713079b21f5189
8 times “1234567890”
9b752e45573d4b39f4dbd3323cab82bf63326bfb
1 million times “a”
52783243c1697bdbe16d37f97f68f08325dc1528
RIPEMD-128:
“”
cdf26213a150dc3ecb610f18f6b38b46
“a”
86be7afa339d0fc7cfc785e72f578d33
“abc”
20
c14a12199c66e4ba84636b0f69144c77
“message digest”
9e327b3d6e523062afc1132d7df9d1b8
“abcdefghijklmnopqrstuvwxyz”
fd2aa607f71dc8f510714922b371834e
“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678

9″
d1e959eb179c911faea4624c60c5c702
8 times “1234567890”
3f45ef194732c2dbb2c4a2c769795fa3
1 million times “a”
4a7f5723f954eba1216c9d8f6320431f
Hiệu suất so sánh của 1 số thuật toán trên petium 90 MHz(trích tài liệu tham
khảo)
3.4Phương pháp kiểm tra tính chính xác của cài đặt
1:Sử dụng hệ thống website online để kiểm tra
http://crypo.in.ua/tools/eng_ripemd.php
https://quickhash.com/
21
http://www.unit-conversion.info/texttools/ripemd/
2: Sử dụng các thư viện encode RIPEMD,1 vài chương trình encode RIPEMD
– Python
import hashlib
h = hashlib.new(‘ripemd160’)
h.update(“a”)
print h.hexdigest()
Trong đó “a” là thông điệp đầu vào,kết quả băm theo thuật toán RIPEMD-160 ta được
0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
Hình 3.2 Kết quả thực tế
-Java
Thư viện RIPEMD trên Java :
http://www.java2s.com/Code/Jar/b/Downloadbouncycastlelwjar.htm
import org.bouncycastle.crypto.digests.RIPEMD128Digest;
import org.bouncycastle.crypto.digests.RIPEMD160Digest;
import org.bouncycastle.util.encoders.Hex;
22

public class test {
public static void main (String[] argv) throws Exception
{
byte[] r = “a”.getBytes(“US-ASCII”);
RIPEMD160Digest d = new RIPEMD160Digest();
d.update (r, 0, r.length);
byte[] o = new byte[d.getDigestSize()];
d.doFinal (o, 0);
System.out.println(“RIP-160”);
Hex.encode (o, System.out);
System.out.println();

byte[] r2 = “a”.getBytes(“US-ASCII”);
RIPEMD128Digest d2 = new RIPEMD128Digest();
d2.update (r2, 0, r2.length);
byte[] o2 = new byte[d2.getDigestSize()];
d2.doFinal (o2, 0);
System.out.println(“RIP-128”);
Hex.encode (o2, System.out);
System.out.println();
}
}
Chương trình thực hiện băm thông điệp đầu vào là “a” và kết quả băm trả về tương
ứng cho RIPEMD-160 và RIPEMD -128 là
RIP-160
0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
RIP-128
86be7afa339d0fc7cfc785e72f578d33
23

KẾT LUẬN
Sau thời gian tìm hiểu nhóm đã tìm hiểu được tổng quan về hàm băm và Hàm băm
RIPEMD, đi sâu phân tích và thiết kế phần mềm băm dựa trên thuật toán của
RIPEMD trên ngôn ngữ lập trình C. Do thời gian tìm hiểu ngắn nên không thể tránh
khỏi sai sót trong quá trình nghiên cứu và thực hiện đề tài, rất mong nhận được sự
đóng góp ý kiến của quý thầy cô để nhóm ngày càng hoàn thiện hơn,
Trong thời gian tới nhóm vẫn sẽ nghiên cứu về hàm băm để hoàn thiện hơn về
chương trình, không chỉ là nghiên cứu về RIPEMD mà còn cả những hàm băm mật
mã khác
24
TÀI LIỆU THAM KHẢO
– RIPEMD-160:A Strengthened Version of RIPEMD
http://www.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf
– The Cryptographic Hash Function RIPEMD-160
https://www.cosic.esat.kuleuven.be/publications/article-317.pdf
– Mã nguồn tham khảo
http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
http://rosettacode.org/wiki/RIPEMD-160
25
MỤC LỤCLỜI NÓI ĐẦUNgày nay với việc ứng dụng của công nghệ thông tin ngày càng phổ cập rộngrãi ảnh hưởng tác động rất lớn đến diện mạo của đời sống kinh tế tài chính xã hội. Mọi việc làm hàngngày của tất cả chúng ta đều hoàn toàn có thể triển khai với sự tương hỗ của máy vi tính và mạnginternet ( từ học tập thanh toán giao dịch … ) và máy tính và internet đã trở thành một phần khó cóthể tách rời với nhịp sống tân tiến ngày này. Nhưng một yếu tố khó đặt ra là làm saođể giữ được bí hiểm thông tin cho đến khi chúng đến nơi mà chúng cần đến. Nhiều tổchức cá thể đã tìm kiếm và đưa ra giải pháp bảo mật thông tin chiêu thức mã hóa khá cao. Như vậy mã hóa thông tin sẽ đảm bào cho thông tin tránh bị đổi khác hoặc sao chép. Trong bài điều tra và nghiên cứu này nhóm sẽ trình diễn về yếu tố mã hóa thông tin sử dụng hàmbăm, tìm hiểu và khám phá tổng quan về hàm băm và đi sâu khám phá nghiên cứu và phân tích phong cách thiết kế setup thuậttoán mã hóa RIPEMDCHƯƠNG 1H ÀM BĂM MẬT MÃ1. 1 Tổng quan về hàm băm mật mãHiểu theo nghĩa đơn thuần, hàm băm là hàm cho tương ứng một mảng dữ liệulớn với một mảng tài liệu nhỏ hơn mà được dùng thoáng rộng trong nhiều ứng dụngtin học, không riêng gì thuộc khoanh vùng phạm vi mật mã. Ở đây, tất cả chúng ta chỉ xét đến những hàmbăm trong khoanh vùng phạm vi những hàm băm mật mã, xem xét đơn cử đến những ứng dụng củachúng trong việc bảo vệ tính toàn vẹn của tài liệu. Các hàm băm nhận nguồn vào là một chuỗi bit có chiều dài hữu hạn tùy ý vàtạo ra một chuỗi bit có chiều dài cố định và thắt chặt bằng n bit ( n > 0 ) gọi là mã băm ( hashcode ). Trong mã hóa, mã băm được xem như là ảnh đại diện thay mặt thu gọn ( compactrepresentative image ) của một chuỗi bit có độ dài hữu hạn tùy ý và được dùngđể nhận diện cho chuỗi bit đó. Kết hợp với công cụ tạo chữ ký số, những hàm bămđược dùng cho việc bảo vệ tính toàn vẹn của tài liệu. Trong lược đồ chữ ký số, mã băm của chuỗi bit được tính ở thời gian Tvà được bảo vệ để chống lại mọisự đổi khác phạm pháp. Tại thời gian Tsau đó, để kiểm tra xem chuỗi bit x cóbị biến hóa hay không, người ta thường tính giá trị hàm băm của chuổi bit này tạithời điểm T, mà ta ký hiệu là xT2, sau đó so sánh giá trị vừa tính với mã băm tạithời điểm T1. Nếu 2 giá trị bằng nhau thì người ta đồng ý chuổi bit tại thờiđiểm T2 trùng khớp với chuổi bit tại thời gian T1, tức chuỗi bit x vẫn chưa bị thayđổi. Như vậy yếu tố bảo vệ tính toàn vẹn của chuỗi bit có chiều dài tùy ý đượcthay bằng việc bảo vệ sự toàn vẹn của chuỗi bit có chiều dài cố định và thắt chặt. 1.2 Định nghĩa tổng quát của hàm bămHàm h ( x ) được gọi là một hàm băm nếu nó thoả mãn hai đặc thù sau : • Nén gọn ( Compression ) : Hàm h ( x ) tương ứng chuỗi bit đầu vào xcó chiều dài hữu hạn tuỳ ý vào chuỗi bit y = h ( x ) có chiều dài cố địnhn > 0 cho trước. • Dễ tính toán ( Easy of computation ) : Với mọi chuỗi bit đầu vào xcó chiều dài hữu hạn tuỳ ý, h ( x ) được giám sát thuận tiện. 1.3 Các đặc thù của hàm băm mật mãMột hàm băm mật mã lý tưởng có những đặc thù sau : 1.3.1 Tính kháng tiền ảnh ( Preimage resistance ) Với mọi đầu ra y cho trước, không hề tìm được bất kỳ dữ liệu nguồn vào x saocho h ( x ) = y ( hay không hề tìm được một thông điệp từ một giá trị băm cho trước ). 1.3.2 Tính kháng tiền ảnh thứ hai ( 2 nd – Preimage resistance ) Với mọi tài liệu nguồn vào x cho trước và y = h ( x ), không hề giám sát để tìm rađược giá trị x ’ x sao cho h ( x ’ ) = h ( x ) ( hay không hề tìm ra 2 thông điệp khác nhau  mà có cùng giá trị băm ). 1.3.3 Tính kháng xung đột ( Collision resistance ) Không thể thống kê giám sát để tìm được hai tài liệu nguồn vào x và x ’ phân biệt sao chochúng có cùng giá trị băm h ( x ) = h ( x ’ ) ( hay không hề sửa được một thông điệp màkhông làm đổi khác giá trị băm của nó ). 1.4 Phân loại hàm băm mật mãDựa trên tham biến nguồn vào của những hàm băm, những hàm băm mật mã đượcphân thành hai lớp :  Lớp những hàm băm sử dụng khoá ( keyed hash functions ), ví dụ điển hình nhưMAC ( Message Authentication Codes ) : nhận hai giá trị đầu vàoo Thông điệp cần tính giá trị bămo Khoá bí hiểm để băm văn bản theo đúng chuẩn lao lý  Lớp những hàm băm không sử dụng khoá ( unkeyed hash functions ) : chỉnhận duy nhất một giá trị nguồn vào là Thông điệp ( message ). Trong lớp những hàm băm không sử dụng khoá thì MDCs ( ModificationDetection Codes – mã nhận diện sự đổi khác ) là lớp con của lớp này. Lớp hàmnày lại liên tục phân thành những lớp con nhỏ hơn – Hàm băm một chiều ( One-Way Hash Functions – OWHFs ) : cáchàm trong lớp này đều thoã đặc thù là với mọi mã băm biết trước, khôngthể giám sát để tìm được chuỗi bit nguồn vào có mã băm bằng với mã bămđã cho. – Hàm băm kháng xung đột ( Collision Resistant Hash Functions – CRHFs ) : những hàm trong lớp này thoã mãn tính chất không hề tínhtoán để tìm ra hai chuỗi bit có cùng giá trị băm. 1.5 Cấu trúc của thuật toán hàm bămKhối tài liệu nguồn vào x có chiều dài tuỳ ý sẽ được phân thành những khối con liêntiếp x1, x2, …, xm ( với xi có chiều dài cố định và thắt chặt là r ). Tuy nhiên do chiều dài khối banđầu là tùy ý nên ta cần thêm vào tài liệu bắt đầu một số ít bit phụ sao cho tổng số bitcủa khối tài liệu x sau khi thêm vào sẽ là bội số của r. Ngoài ra số bit phụ thêm vàothường chứa một khối bit xác lập chiều dài thực sự của khối tài liệu khi chưa thêmcác bit phụ. Sau đó ta lần lượt cắt từng khối con r bit từ khối x. Mỗi khối con r bit xi ta triển khai một hàm nén của hàm băm h ( x ) được ký hiệulà f. Tại bước thứ i, hàm nến f nhận tài liệu nguồn vào là xi và hiệu quả trung gian củabước trước đó để tạo đầu ra là tác dụng trung gian bước thứ i, ký hiệu là Hi. Kết quảtrung gian tại mỗi bước Hi là một chuổi bit có độ dài cố định và thắt chặt bằng n > 0. Nếu ký hiệuIV ( init value ) là giá trị khởi tạo khởi đầu cho H0, thì quy trình lặp giải quyết và xử lý dãy những khốicon x1, x2, …, xm được miêu tả như sau : = IV = f ( Hi-1, ), ( i = 1, …, m ) h ( x ) = g ( Hlà hiệu quả trung gian sau bước thứ i, là những biến dây chuyền sản xuất. Hàm g ( x ) ánh xạ biến dây chuyền sản xuất sau cuối để tạo ra mã băm hiệu quả. Và thường thì, g ( x ) được chọn là ánh xạ như nhau : g ( H. Khâu then chốt trong xây dựnghàm băm là phong cách thiết kế hàm nén f. 1.6 Ứng dụng của hàm băm mật mãMột ứng dụng nổi bật của một hàm băm mật mã học như sau : Alice đưa choBob một câu đố khó và công bố rằng cô ấy đã giải được rồi. Bob muốn tự giải, nhưng cũng muốn chắc như đinh là Alice đúng là đã giải được. Do đó, Alice viết đáp án, gắn thêm một nonce ngẫu nhiên, tính giá trị băm của nó, và đưa tác dụng băm cho Bob ( trong khi vẫn giữ bí hiểm đáp án và nonce ). Bằng cách này, khi Bob tự giải xong, Alice hoàn toàn có thể chứng tỏ rằng cô đã có đáp án từ trước bằng cách đưa nonce choBob. Trong thực tiễn, Alice và Bob thường là những chương trình máy tính, và bí mậtthường là cái gì đó không dễ lừa bằng một lời giải cho câu đó. Ứng dụng trên đượcgọi là một mạng lưới hệ thống đáng tin cậy ( commitment scheme ). Một ứng dụng quan trọng khác của những hàm băm bảo mật thông tin là sự kiểm tra tínhtoàn vẹn của thông điệp. Ví dụ, việc xác lập xem một file hay một thông điệp có bịsửa đổi hay không hoàn toàn có thể triển khai bằng cách so sánh tóm tắt được tính trước và saukhi gửi ( hoặc một sự kiện bất kể nào đó ). Còn hoàn toàn có thể dùng tóm tắt thông điệp làmmột phương tiện đi lại đáng đáng tin cậy cho việc nhận dạng file. Một ứng dụng có tương quan là kiểm tra mật khẩu. Mật khẩu thường khôngđượclưu dưới dạng văn bản rõ ( clear text ), mà ở dạng tóm tắt. Để xác nhận một ngườidùng, mật khẩu do người đó nhập vào được băm và so sánh với hiệu quả băm đượclưu trữ. Do những nguyên do cả về bảo mật thông tin và hiệu năng chương trình, hầu hết những thuật toánchữ ký số nói rằng chỉ có tóm lược của thông điệp, chứ không phải toàn văn thôngđiệp, được ” ký “. Các hàm băm còn hoàn toàn có thể được dùng để tạo những bit giả ngẫu nhiên ( pseudorandom ). 1.7 Các hàm băm mật mã hiện nayTrong list dài những hàm băm mật mã dưới đây, có 1 số ít hàm băm đượccho là dễ bị tổn thương và không nên sử dụng. Ngay cả khi một hàm băm chưa bịphá vỡ, một tiến công thành công xuất sắc so với một biến thể yếu đó hoàn toàn có thể làm giảm sự tựtin của những chuyên viên và dẫn đến vô hiệu nó. Ví dụ, vào tháng 8 năm 2004 người tađã tìm ra những điểm yếu của một vài hàm băm phổ cập vào thời đó, gồm có SHA-0, RIPEMD, và MD5. Điều này đã đặt ra câu hỏi bảo mật an ninh lâu dài hơn của những thuậttoán sau này được bắt nguồn từ những hàm băm này – đặc biệt quan trọng, SHA-1 ( một phiênbản mạnh của SHA-0 ), RIPEMD-128, và RIPEMD-160 ( cả hai phiên bản mạnh củaRIPEMD ). Vì vậy, cả SHA-0 và RIPEMD đều không được sử dụng thoáng rộng kể từkhi chúng được thay thế sửa chữa bởi những phiên bản mạnh. Thuật toán Kích thước đầu ra KícthướctrạngtháitrongKíchthướckhốiThôngđiệp tốiđaKíchthướcwordXungđộtHAVAL 256 / 224 / 192 / 160 / 12256 1024 64 32 CóMD2 128 384 128 No 8K hnănglớnMD4 128 128 512 64 32 CóMD5 128 128 512 64 32 CóPANAMA 256 8736 256 No 32 Có lỗiRIPEMD 128 128 512 64 32 CóRIPEMD-128 / 256128 / 256 128 512 64 32 KhônRIPEMD-160 / 320160 / 320 160 / 320 512 64 32 KhônSHA-0 160 160 512 64 32 CóBảng 1 : Các hàm băm mật mãCHƯƠNG 2H ÀM BĂM RIPEMD2. 1 Tổng quan về hàm băm RIPEMDRIPEMD ( RACE Integrity Primitives Evaluation Message Digest ) là một họcủa hàm băm mật mã được tăng trưởng ở Leuven – Bỉ bởi Hans Dobbertin, AntoonBosselaers và Bart Preneel tại nhóm điều tra và nghiên cứu COSIC tại Katholieke UniversiteitLeuven và lần tiên phong được xuất bản vào năm 1996. RIPEMD được dựa trên cácnguyên tắc phong cách thiết kế được sử dụng trong MD4, nhưng hiệu năng hoạt động giải trí phổ biếnhơn MD42. 2 RIPEMD-128RIPEMD – 128 là một hàm băm 128 – bit sử dụng thiết kế xây dựng như lan rộng ra củaThuật toán Merkle Damgard : hàm băm được thiết kế xây dựng bằng cách duyệt một chứcnăng nén 128 – bit mà mất như một nguồn vào 512 – bit với đẩu ra là 128 bit. Các tính năng nén RIPEMD – 128 dựa trên MD4, với những đặc trưng mà nó sửdụng hai trường hợp song song của nó, Chúng ta phân biệt hai Trụ sở thống kê giám sát củanhánh trái và nhánh phải và tất cả chúng ta hiển thị bởi X ( resp. Y ) 32 bit của nhánh trái ( resp. right branch ). Quá trình này sẽ được update trong bước i của hàm nén. Quátrình này gồm có 64 bước chia thành 4 vòng 16 bước từng ở cả hai Trụ sở cụ thểvề quy trình : Khởi tạo : Các nguồn vào 128 – bit chuỗi cvbiến được chia thành 4 từ hmỗi 32 bit, sẽsử dụng để khởi tạo những nhánh trái và phải 128 – bit trạng thái nội bộ : 10M ở rộng tin : Khối tin nguồn vào 512 – bit được chia thành 16 từ Mi của mỗi 32 bit. mỗitừ Mi sẽ được sử dụng một lần trong mỗi vòng theo một thứ tự hoán vị ( tựa như nhưMD4 ) và cho cả 2 nhánh. Chức năng của từng bước : Tại mỗi bước i, sổ ĐK Xi + 1 và Yi + 1 được cập nhậtvới những công dụng fvà fđiều đó phụ thuộc vào vào những vòng j trong mà i thuộc về : Kết thúc quy trình : Một quyết toán và một feed-forward được vận dụng khi tổng thể 64 bước đã được đo lường và thống kê trong cả 2 Trụ sở. Bốn 32 – bit từ hsoạn ra chuỗi biến cuốicùng đã thu được bằng cách : 2.3 RIPEMD-160RIPEMD-160 là một hàm băm mật mã 160 – bit, được phong cách thiết kế bởi Hans Dobbertin, Antoon Bosselaers và Bart Preneel. Nó được phong cách thiết kế để sử dụng như thể một thay thếan toàn cho những hàm băm 128 – bit MD4, MD5 và RIPEMD. MD4 và MD5 được pháttriển bởi Ron Rivest cho RSA Data Security, trong khi RIPEMD được tăng trưởng trongkhuôn khổ của dự án Bất Động Sản RIPE EU ( RACE Integrity Primitives Evaluation, 1988 – 1992 ). Có ba lý chính để xem đây là một sự biến hóa tốt : • Một tác dụng băm 128 – bit không cung ứng đủ bảo vệ nữa, một cuộc tấn côngbrute force vào hàm 128 bit chỉ yên cầu 264 hoặc 2.1019 giá trị của hàm. Năm1994 Paul van Oorschot và Mike Wiener cho thấy việc brute – lực lượng này cóthể được thực thi trong vòng chưa đầy một tháng với một khoản góp vốn đầu tư USD 10.000.000 • Trong nửa đầu năm 1995 Hans Dobbertin tìm thấy va chạm so với một phiênbản của RIPEMD hạn chế đến hai vòng cùng của ba. Sử dụng kỹ thuật tương tựđược sản xuất Hans vào mùa thu năm 1995 cho những va chạm ( tổng thể 3 vòng ) 11MD4. Cuộc tiến công vào MD4 chỉ yên cầu một vài giây trên một máy tính, vàvẫn còn để lại một chút ít tự do để lựa chọn những tin nhắn, cầm quyền rõ ràng ra MD4như là một hàm băm kháng va chạm. Ngay sau đó, vào mùa xuân năm 1996, Hans cũng tìm thấy va chạm cho những tính năng nén MD5. Mặc dù chưa đượcmở rộng đến va chạm với MD5 bản thân, cuộc tiến công này phôi nghi ngờnghiêm trọng về sức mạnh của MD5 là một vụ va chạm • Crypto 2004 Xiaoyun Wang, Dengguo Feng, Xuejia Lai và Hongbo Yu tìmthấy sự xung đột trong : MD4, MD5, RIPEMD, and the 128 – bit version ofHAVAL. RIPEMD – 160 là một phiên bản được tăng cường của RIPEMD với một kếtquả băm 160 – bit, và dự kiến sẽ được bảo đảm an toàn trong mười năm tới hoặc hơn. Triết lýthiết kế là kiến thiết xây dựng càng nhiều càng tốt về kinh nghiệm tay nghề thu được bằng cách đánh giáMD4, MD5, và RIPEMD. Giống như người nhiệm kỳ trước đó của nó, RIPEMD – 160 được kiểm soát và điều chỉnh cho bộ vi giải quyết và xử lý 32 – bit, mà tất cả chúng ta cảm thấy sẽ vẫn quan trọngtrong thập kỷ tới. RIPEMD – 256 và RIPEMD – 320 là phần lan rộng ra tùy chọn tương ứng choRIPEMD – 128 và RIPEMD – 160, và được dành cho những ứng dụng của những hàm bămmà yên cầu một tác dụng hash lâu hơn mà không cần một mức độ bảo mật thông tin lớn hơn12CHƯƠNG 3PH ÂN TÍCH THIẾT KẾ VÀ CÀI ĐẶT RIPEMD3. 1 Phân tíchhình 3.1 Sơ đồ thuật toánMô tả thuật toán13Input : Thông điệp ( văn bản ) có độ dài tùy ýOuput : Bản băm, đại diện thay mặt cho văn bản gốc, độ dài cố định và thắt chặt ( phụ thuộc vào vào thuật toánRIPEMD mà bản băm có size 128 bit, 160 bit, 256 bit, 320 bit ). Giả sử thông điệp nguồn vào là a có độ dài b ( b hoàn toàn có thể bằng 0 ) Phân tích thuật toán RIPEMD-160RIPEMD-160 nén một chuỗi nguồn vào size tùy ý bằng cách chia thànhkhối của mỗi 512 bit. Mỗi khối được chia thành 16 chuỗi 4 byte mỗi, và mỗi chuỗi 4 – byte đó được quy đổi thành một từ 32 – bitĐể bảo vệ rằng kích cỡ tổng số nguồn vào là một bội số của 512 bit, đầu vàođược đệm thêm chuỗi n những số 0 ( 0 < n < 511 ). Thông điệp nguồn vào sẽ được xử lí qua5 vòng song song. Kết quả của RIPEMD-160 được chứa trong 5 từ 32 bitHoạt động của thuật toán1 : A : = ( A + f ( B ; C ; D ) + X + K ) <