Trong trường hợp, B chối là chưa nhận được tin X thì A chỉ việc đưa ra bằng chứng là biên nhận E z B X Nhược điểm của hệ chữ ký đang xét Khi sử dụng PKC để mã hoá thông báo để tạo chữ k
Trang 1CHƯƠNG 4 CHỮ KÝ ĐIỆN TỬ VÀ HÀM BĂM
Chữ ký điện tử
Khái niệm về Digital Signature được để xuất bởi Diffie & Hellman (1976)
Mặc dù thời đó mạng máy tính còn chưa phát triển, những các ông này đã nhìn thấy trước tương lai của một xã hội được tin học hoá cao độ đến mức các giao dịch thương mại có thể được thực hiện hoàn toàn thông qua máy mính Khái niệm chữ ký điện tử (Digital signature - DS) được đặt ra như một căn bản cần phải có, nó phải phản ánh được các thuộc tính của chữ ký tay trong thực tế mặc dù mang bản chất ‘tin học” là một chuỗi bit 0
và 1 có thể hoàn toàn dễ dàng bị sao chép và cắt ghép
Đi gắn liền với thông tin (message) mà nó (ký), nó phải chứng mình được tính tin cậy của thông tin, tức là nó chứng tỏ được
+ Thông tin không bị sửa đổi
+ Thông tin đúng là được tạo ra từ người gửi thực chứ không phải do một người thứ ba mạo danh
Để làm được điều đó, một hệ Ds cần có các thuộc tính:
+ Việc tạo ra chữ ký là thuậnt iện, dễ dàng
+ Người nhận có thể dễ dàng kiểm định chữ ký
+ Việc tạo giả chữ ký là khó xảy ra đến phí thực tế
DS sẽ là một chuỗi bit được dán nối tiếp với thông tin (message)
Điểm khác biệt giữa DS và chữ ký tay thường
+ DS phụ thuộc vào nộidung của thông tin: nó là một hàm của toàn bộ thông tin
+ Với chữ ký tay, người ký thực sự thực hiện một quá trình vật lý từ đầu đến cuối, trong khi với DS, người ký chỉ cung cấp một thông số bí mật mà dựa vào đó máy tính sẽ làm ra chữ ký Thông số bí mật này là xác định duy nhất đối với người kỳ, đó có thể là dầu vân tay, ảnh chụp võng mạc mặt hay là một con số duy nhật bí mật
Một hệ DS bao gồm hai thuật toán: Sinh chữ ký và kiểm định chữ ký
1 Thuật toán sinh chữ ký: ký hiệu SA, lấy vào một thông tin X và sinh ra một chữ ký cho
X : SA(X)
2 Thuật toán kiểm định chữ ký: ký hiệu là VA, với đầu vào là một thông tinX cùng với chữ ký trên nó, cho đầu ra là giá trị đúng hoặc sai
Điều kiện đòi hỏi đối với hệ thông là:
+ V A(X,S)truekhi và chỉ khiS S A (X)
+ Nếu không biết khoá thì thực tế không thể tạo được một cặp (X, S) sao cho cũng thoả mãn V A(X,S)true
Trang 2+ Đã biết thực tế là không thể tìm được một thông báo X’ có cùng một chữ ký, tức là SZ (X) = SA(X’)
DS sử dụng thuật toán với public key
A ký lên X bởi tạo ra một mãY D (X)
A
z
Toàn bộ thông tin được ký bây giờ là
))
(
,
(X E z A X
+ B kiểm định chữ ký tạo ra bởi A bằng cách tínhX'E Z A(Y) sau đó so sánh với X Tất cả đều biết E Z Acho nên đều có thể kiểm định được chữ ký của A
Kẻ thù không thể có được za cho nên chữ ký của a là không thể bị giả mạo
Sau đây ta sẽ xét một số các ứng dụng của chữ ký điện tử
Non-repudiation (không thể chối cãi được)
Non-repudiation tức là khả nang làm sáng tỏ được trường hợp có một bên chối cãi rằng
đã không tạo/gửi đi motọ thông báo giao dịch nào đây 9đẩy cho một kẻ thứ ba làm giả hoặc bên nhận bịa ra) Với chữ ký điện tử rõ ràng chỉ có Alice mới biết zA để tạo ra chữ
ký và cô ta phải hoàn toàn chịu trách nhiệm với nó Do đó ta nói hệ DS cung cấp non-repudiation
Public Notary (công chứng)
Trong trường hợp bên Alice cố “cãi chày cãi cối”, rằng cô ta chỉ chẳng may làm thất lạc hay vô tình đánh lộ zA và bị một kẻ thứ ba lợi dụng chứ chưa hề có ý thức tạo ra văn bản
có chữ ký như thế, thì một khái niệm mới, trọng tài, có thể được nêu thêm vào hệ thống Người trọng tài này cũng còn gọi là công chứng viên (public notary) sẽ ký đè lên chữ ký của Alice để chứng thực, Alice khôgn có khả năng nào chối cãi, và chuyển một bản cho Alice , một bản lưu
Proof of delivery (xác nhận giao hàng - hoá đơn)
Ngược lại, bên gửi cũng cần được bảo vệ để chống lại hiện tượng người nhận có nhận được thông báo nhưng chối là chưa nhận được Điều này có thể thực hiện được qua những giao thức có phân xử (adjudicated protocol), tức là những giao thức mà sau đó cho phép người thứ ba có thể kiểm định lại được Ví dụ:
A B: Y E Z B(E z A(X))
B: tính X' E (E (Y))
B
A z Z
BA: Y'E Z A(E z B(X'))
Khi B nhận được Y, B giải mã và lấy ra X’=X, sau đó ký lên X’ và chuyển cho A như giấy biên nhận A sẽ coi như là B vẫn chưa nhận được thông báo X của mình cho đến khi
Trang 3nào mà nhận được phản hồi là Y’, mà từ đó dùngE z Anó sẽ thu được E z B (X) - một “hoá đơn biên nhận”
Chú ý rằng các toán tử mã hoá lớp ngoài với khoá công khai ở bước 1 và 3 được sử dụng
để ngăn chặn nghe trộm
Trong trường hợp, B chối là chưa nhận được tin X thì A chỉ việc đưa ra bằng chứng là biên nhận E z B (X)
Nhược điểm của hệ chữ ký đang xét
Khi sử dụng PKC để mã hoá thông báo để tạo chữ ký, thông báo được chia thành nhiều khối và mỗi khối được ký (mã hoá) riêng biệt:
X = (X1,X2,X3, Xt ) ( SA(X1), SA(X2), , SA(Xt) )
Do đó tạo ra điểm yếu: kẻ địch có thể phá hoại thông tin trên cở sở thao tác thay đổi với các khối nguyên vẹn (không đụng vào bên trong) nếu như nó biết độ dài khối:
- thay đổi trật tự các khối
- xoá bớt khối
- thay thế một vài khối
Ngoài ra hệ thống cũng mắc phải những khuyết điểm:
- vì thuật toán PKC chạy chậm nên khâu tạo chữ ký lâu
- chữ ký có độ dài như thông tin mà nó ký lên, làm toàn bộ thông báo nở gấp đôi, trong khi chúng ta cần chữ ký cũng phải như ký tay thật nghĩa là ngắn và độ dài không phụ thuộc vào độ dài thông báo
Giải pháp cho các vấn đề trên là bằng cách sử dụng các hàm băm
Hàm băm (hash function)
Khái niệm
Một hàm băm H sẽ lấy ở đầu vào một thông tin X có kích thước biến thiên và sinh kết quả ra là một chuỗi có độ dài cố định Chuỗi này thường được gọi là cốt (cốt yếu- digest) của thông tin X H(X) thường có kích thước nhỏ hơn rất nhiều so với X
Ví dụ: Thông tin X có thể là một file trong khi cốt của nó chỉ là một khối dài 128 bít Điều đó dẫn đến có thể có 2 thông tin khác nhau sẽ cho cùng một cốt giống nhau với một hàm băm Trường hợp này gọi là đụng độ (collision)
Ví du: Hàm H(X) được lấy là hàm lấy số dư phép chia cho 10, rõ ràng ta có:
H(56)= H(156) = H(96)
ứng dụng chính của hàm băm là dùng trong hệ chữ ký điện tử Người ta thực hiện tác tử
ký lên H(X) thay vì X là sử dụng (X, DS(H(X)) như văn bản đã ký
Trang 4ở đây chúng ta cần các hàm băm mật mã (cryptographic hash function0 với các thuộc tính như sau:
1 Lấy đầu vào một xâu với độ dài bất kỳ và sinh ra một xâu với độ dài cố định
2 Là một chiều (one - way): có thể dễ dàng tính được giá trị băm Y của X cho trước, nhưng không thể tính ngược được X từ giá trị băm Y của nó
3 Có tính phi đụng độ cao (collision free), tức là thực tế không thể tim được hai thông tin
X X’ sao cho H(X)H(X)
Trang 5Nhận xột:
1 Cỏc thuộc tớnh trờn của hàm băm là cần thiết cho hệ DS, vỡ:
+ Tớnh chất 1 cần cho việc sinh chữ ký một cỏch hiệu quả (chữ ký lờn (H(X) rừ ràng sẽ ngắn hơn rất nhiều lờn trực tiếp X)
+ Tớnh chất 2 và 3 được dựng để chống lại những kẻ giả mạo chữ ký
Nếu như một kẻ giả mạo C cú thể tạo ra được một cặp thụng bỏo XX’với
) (
)
H sao cho đối với Alice thỡ X là cú lợi cũn X’ là bất lợi, thỡ C cú thể dễ dàng lấy được chữ ký của Alice lờn X và sau đú C đỏnh trỏo sử dụng văn bản
)) ' ( )
(
,'
(X S A X S A X để làm hại Alice
2 Cú thể chức mỡnh được rằng tớnh phi đụng độ dẫn đến tớnh một chiều (one-way), vỡ vậy chỉ cần tỡm cỏc hàm băm với tớnh phớ đụng độ cao là đủ
3 Một hệ DS mạnh với hàm băm tốt cú thể lại kết hợp nờn một hệ chữ ký yếu, do đú cần phải thận trọng trong việc kết hợp đú
Đụng độ
Rừ ràng là với khụng gian giỏ trị băm nhỏ hơn khụng gian tin về mặt kớch thước thỡ chắc chắn sẽ tồn tại đụng độ (collision), nghĩa là cú hai TIN XX’ mà giỏ trị băm của chỳng giống nhau nghĩa là H(X)=H(X’) Điều này cú thể nhỡn thấy rừ ràng hơn nếu ở đõy chỳng ta nhắc lại nguyờn lý Diricle:
Nếu cú n+1 con thỏ được bỏ vào n cỏi chuồng thỡ phải tồn tại ớt nhất một cỏi chuồng mà trong đú cú ớt ra là hai con thỏ ở chung.
Vớ dụ
X
C XDA(H(X))
Concatenation H(X)
Bộ tạo chữ ký
EA
+
Bộ kiểm định chữ ký
H
0 - Accept
1 - Reject
DA(H(X))
XDA(H(X))
(H(X)
Trang 6Giả sử không gian tin là Zp* = {1,2, ,p-1} và không gian giá trị băm là Zq*={1,2, ,q-1} với q là nguyên tố và p>q
Chọn một số g Zq*
Để “băm” một tin x chúng ta sử dụng hàm băm: h(x) = gx (mod q)
Ví dụ chọn p=15, q=11, g=3 ta có:
Nếu ta sử dụng chuỗi 4 bit để biểu diễn các tin thì H(0010) = H(0111)
Trong thực tế người ta thường chọn không gian băm cỡ khoảng 64bit, 128 bit Trong khi đó các thông báo thực tế lớn hơn nhiều đến hàng nhiều kilobyte cho nên việc tồn tại đụng độ là chắc chắn Tuy nhiên với hàm băm có không gian băm lớn được chế tạo tốt (an toàn) thì việc tìm ra đụng độ là rất khó đòi hỏi dung lượng tính toán lớn đến mức phi thực tế (infesible computation)
Việc chế tạo các hàm băm phi đụng độ là rất khó Nhiều hàm băm được phát minh bởi các nhóm có tên tuổi trên thế giới sau một thời gian xuất hiện đã bị những người khác chỉ
ra những đụng độ tồn tại và không được công nhận là an toàn nữa
Birthday attack
Như ta đã biết, một tấn công có khả năng đối với các hệ chữ ký điện tử có dùng hàm băm
là tìm cách tạo ra được những văn bản X và X’ có nội dung khác nhau (một có lợi một có hại cho bên ký) mà có giá trị băm giống nhau Kẻ thù có thể tìm cách tạo ra một số lượng rất lớn các văn bản có nội dung không thay đổi nhưng khác nhau về biểu diễn nhị phân (đơn giản là việc thêm bớt các dấu trắng, dùng nhiều từ đồng nghĩa thay thế nhau ) sau
đó sử dụng một chương trình máy tính để tính giá trị băm của các văn bản đó và đem so sánh với nhau để hi vọng tìm ra một cặp văn bản có đụng độ
Như đã nêu ở phần trên thì để chắc chắn có thể tìm được một đụng độ như vậy số văn bản cần được tính giá trị băm phải lớn hơn kích thước không gian băm Chẳng hạn như nếu hàm băm có không gian băm 64 bit thì số lượng văn bản cần được đem ra nạp vào chương trình thử này phải là ít nhất 264, một con số quá lớn đến mức hàng thế kỷ nữa cũng không không xong!
32 = 9 (mod 11)
33 = 5 (mod 11)
34 = 4 (mod 11)
35 = 1 (mod 11)
36 = 3 (mod 11)
37 = 9 (mod 11)
Collision!
Trang 7Tuy nhiên nếu như kẻ thù đem thử với một lượng văn bản ít hơn nhiều, trong phạm vi có thể tính toán được, thì xác xuất để tìm được đụng độ có đáng kể hay không? Và câu trả lời thực đáng ngạc nhiên, xác xuất này có thể vẫn khá lớn, tức là có nhiều hy vọng tìm được đụng độ dù tập văn bản đem thử không lớn lắm Bản chất của hiện tượng này có thể được minh hoạ rõ qua một phát biểu, thường gọi là Birthday Paradox (nghịch lý ngày sinh nhật) như sau:
Trong một nhóm có 23 người bất kỳ, xác xuất để có hai người có cùng một ngày sinh nhật là không ít 1/2
Một cách tổng quát, giả sử một hàm băm có m giá trị băm khác nhau (tức là kích thước của không gian output của hàm băm là m) Nếu chúng ta có k giá trị băm từ k thông tin được chọn ngẫu nhiên khác nhau, thì xác xuất để có ít nhất một đụng độ là:
m k k
e k
m
) 1 (
1 ) , (
Với e là hằng số Ơ - le: e 2.7 ước lượng xác xuất này phụ thuộc vào kích thước của không gian băm (m) và số lượng thông tin được xét đến chứ không phụ thuộc vào hàm băm đều sử dụng Tức là kích thước của không gian băm xác lập một chặn dưới cho xác xuất trên
Ví dụ: Trong nghịch lý ngày sinh nhật nói trên, thì ta có thể thấy k = 23, m = 365, do đó xác xuất tồn tại 2 người có cùng ngày sinh nhật là:
5 0 7 2 1 1
) 23 , 365
22 23
e P
Công thức nói trên cho phép xác định số lượng thông tin (k) cần thiết để có thể tìm được một đụng độ giá trị băm với xác suất đủ lớn, khi hàm băm xác định trước Ngược lại nó cũng cho phép tính được không gian băm của hàm băm của hàm băm phải lớn ít nhất bao nhiêu để có thể chống lại được hiệu ứng Birthday attack một cách có hiệuquả
Ví dụ: Giả sử kẻ thù có khả năng tính toán trên tập giá trị băm đến 1020 Cần xác định không gian băm để xác xuất kẻ thù có thể tìm ra được một đụng độ là nhỏ hơn 10-3
P(m,k) > m
k k
e 2
) 1 ( 1
e-k(k-1)2m = 0.999
Trang 839 2
2
2 2
10 2
6
4
3
3
4
1
2
999 0 log log
2
)
1
(
k
m
m
k
e m
k
k
Như vậy không gian băm cần đảm bảo lớn hơn 21039, tức là kích thước giá trị băm sẽ không nhỏ hơn log221039=131 bit
thì xác xuất để tìm thấy đụng độ là bao nhiêu?
Tìm đụng độ trên không gian văn bản có kích cỡ 232 là một điều hiện thực đối với ngay
cả các máy tính bình thường Việc nghiên cứu Birthday Paradox cho ta thấy lượng văn bản cần đưa ra thử có thể là rất nhỏ so với không gian băm (232 so với 264) mà việc tìm được đụng độ là cao (50%), cho thấy một mối hiểm hoạ cho các hệ dùng hàm băm có không gian nhỏ Phép tấn công này được gọi là Birthday attack
Bài tập Tìm cách chứng minh nghịch lý Birthday dạng tổng quát, tức là hệ thức (*).
Gợi ý: Giả sử xác xuất để một văn bản bất kỳ khi đem băm thu được một giá trị xác định trước, là p (p=1/m) thì hãy chứng minh xác xuất để k văn bản bất kỳ có các giá trị băm không trùng nhau là:
P(k văn bản không trùng nhau) = (1 p)(12p)(13p) (1(k1)p)
Các kỹ thuật làm hàm băm
Các kỹ thuật để chế tạo được hàm băm có thể chia ra làm ba loại:
+ dựa trên việc áp dụng các hệ mã khối theo SKC (khoá bí mật đối xứng)
+ dựa trên các phép toán số học đồng dư
+ các hàm thiết kế băm đặc biệt
Các hàm băm chế từ hệ SKC
Việc tạo ra các hàm băm nhờ áp dụng kỹ thuật SKC là một ý tưởng hết sức tự nhiên, tuy nhiên không phải là dễ dàng thực hiện Có nhiều sơ đồ đã được đề xuất nhưng sau đó lần lượt bị bác bỏ
1 Chế độ CBC (mã khối móc xích)
Trang 9Phương pháp này đã được sử dụng làm chuẩn cho việc chứng thực trong ngân hàng (banking authentication), cụ thể là các chuẩn ANSI 9.9, ANSI 9.19, ISO 873-1
Ta thấy, để bên nhận có thể tính được H(X) thì nó cũng phải có khoá Z, đấy chính nhược điểm của phương pháp này Nếu như khoá Z này chẳng may rơi vào tay kẻ thù thì nó sẽ
dễ dàng có thể tấn công hệ thống sử dụng hàm băm này
2.Sơ đồ Rabin-Matyas-Davies-Price (RMDP)
X = X1 X2
H0 = 0 (hay một số ngẫu nhiên nào đó)
) ( 1
Ở đây, tất nhiên các TIN phải được chặt thành các khối có kích cỡ bằng khoá của hệ mã
E Giá trị băm là H(X) = (H0,Ht)
Người ta chứng minh được rằng với không gian băm chỉ là 64bit thì H(X) không phải là one-way, tức là cho Y=H(X), việc tìm ngược được X là khả thi
3.Sơ đồ Davies-Meyer (DM hash)
X = X1 X2
H0 = vector khởi tạo là một số ngẫu nhiên nào đó
1
1)
Kết luận
+ việc xây dựng các hàm băm từ các mã khối đòi hỏi phải có phân tích tính an toàn một cách cẩn thận
+ DM được coi như là an toàn nếu sử dụng với các mã khối kích thước 128 bit
+ Không có hệ nào khác đã được đề xuất mà được chứng minh là an toàn
Các hàm băm dựa trên các phép toán số học đồng dư
1.QCMDC (Quadratic Congruential Manipulation Detection Code)
Jueneman (1983)
Các TIN được chia thành các khối m bit H0 là giá trị khởi đầu được chọn ngẫu nhiên và giữ bí mật ( keyed hash function)
Các bước xây dựng hàm băm như sau:
M là một số nguyên tố sao cho M 2m-1,
E +
Z
X = X1 X2 X3 Xn
Yi = Ez(Xi Yi-1) H(X) = Yn
Trang 10Hi = (Hi-1 + Xi)2 (mod M)
Hn sẽ là giá trị băm
Hệ này đã phá (Coppersmith)
2 Davies-Price (1985)
Chia TIN thành các khối có m-d bit:
X = X1 X2 X3 Xn
Hi = (Hi-1 Xi)2 (mod M), H0=0
M là luỹ thừa của 2
Hệ này bị chứng minh là không one-way (Girault)
Các hàm băm được chế tạo đặc biệt
Ngoài các kỹ thuật thông thườn nói trên người ta đã tìm nhiều cách rất riêng biệt khác nhau để chế tạo ra những hàm băm có độ tin cậy cao Thông thường những sơ đồ này rất phức tạp và riêng biệt nên không nêu ở đây Sau đây là một số các hàm băm nổi tiếng:
MD5 (Rivest 1992)
Đây là một trong các hàm băm có tiếng nhất và được sử dụng thông dụng:
+ Nó lấy vào các khối đầu vào 512 bit và sinh ra các giá trị băm 128 bit
+ Được tin là phi đụng độ và one-way
+ thuật toán MD5 được thiết kế cho phép chạy tốt nhất trên các máy tính 32 bit Nó sử dụng các phép toán đơn giản như phép cộng modulo 32, do đó thích hợp với ciệc mã hoá cho các bộ xử lý 32 bit
SHA (Secure Hash Function)
Đây là một thuật toán được đề xuất và bảo trợ bởi cơ quan NIST để sử dụng đối với hệ chữ ký DSA (cũng là một dự chuẩn cho chữ ký điện tử) Nó cho giá trị băm là 160 bit và được thiết kế với cùng một tiếp cận như MD5
HAVAL
Một hệ băm của Australia cho phép thay đổi kích thước giá trị băm Cấu trúc rất giống như MD5
Snefru Mekle (1989)
+ keyed hash function
+ Cho phép một trong 2 lựa chọn giá trị băm là 128 bit và 256 bit
+ Eli Biham đã chỉ ra một đụng độ cho trường hợp 128 bit