Tải bản đầy đủ (.doc) (60 trang)

Chữ ký số người xác nhận không thể chối bỏ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (303.05 KB, 60 trang )

Chữ ký số ngời xác nhận không thể chối bỏ
Đặt vấn đề
Khi ứng dụng trên mạng máy tính ngày càng trở nên phổ biến, thuận lợi và
quan trọng thì yêu cầu về an toàn mạng, về an ninh dữ liệu trên mạng ngày càng
trở nên cấp bách và cần thiết. Nguồn tài nguyên trên mạng rất dễ bị đánh cắp
hoặc phá hỏng nếu không có một cơ chế bảo mật cho chúng hoặc sử dụng những
cơ chế bảo mật quá lỏng lẻo. Thông tin trên mạng, dù đang truyền hay đợc lu trữ
đều cần đợc bảo vệ. Hoặc các thông tin ấy phải đợc giữ bí mật, hoặc chúng phải
cho phép ngời ta kiểm tra để tin tởng rằng chúng không bị sửa đổi so với dạng
nguyên thuỷ của mình và chúng đúng là của ngời nhận gửi nó cho ta.
Mạng máy tính có đặc điểm nổi bật là có nhiều ngời sử dụng, nhiều ngời
cùng khai thác một kho tài nguyên, đặc biệt là tài nguyên thông tin và các điểm
có ngời sử dụng thờng phân tán về mặt địa lý. Các điểm này thể hiện lợi ích to
lớn của mạng thông tin máy tính đồng thời nó cũng là điều kiện thuận lợi cho
những ngời muốn phá hoại an toàn thông tin trên mạng máy tính.
Do đó cách tốt nhất để bảo mật thông tin là mã hoá thông tin trớc khi gửi
đi. Mục tiêu cơ bản của mật mã là cho phép 2 ngời, thờng đợc đề cập đến nh
Alice và Bob, liên lạc trên kênh không an toàn theo cách mà đối thủ Orcar không
thể hiểu cái gì đang đợc nói. Kênh này có thể là đờng điện thoại hoặc mạng máy
tính. Thông tin mà Alice muốn gửi đến Bob sẽ đợc gọi là bản rõ (plaintext), có
thể là bất kỳ tài liệu nào có cấu trúc tuỳ ý. Alice mã bản rõ bằng cách dùng khoá
xác định trớc, và gửi bản rõ thu đợc trên kênh không an toàn. Orcar dù thu trộm
đợc mã trên kênh song không thể hiểu đợc bản rõ là gì, nhng Bob là ngời biết
khoá mã có thể giải mã và thiết lập bản rõ.
Có hai loại mật mã là mật mã bí mật và mật mã khoá công khai.Trong mật
mã bí mật, 2 ngời muốn trao đổi thông tin cho nhau phải thoả thuận chọn một
cách bí mật khoá k. Từ k suy ra quy tắc mã hoá e
k
và quy tắc giải mã d
k
. Trong


các hệ mật này, d
k
hoặc trùng với e
k
hoặc dễ dàng rút ra từ e
k
và việc tiết lộ e
k
sẽ
làm cho hệ thống không an toàn. Độ an toàn hệ mật chính là độ an toàn tính toán.
Trong thực tế, một hệ mật là an toàn tính toán nếu phơng pháp tốt nhất đã biết
- 1 -
Chữ ký số ngời xác nhận không thể chối bỏ
để phá nó yêu cầu một số lớn không hợp lý thời gian tính toán, nghĩa là quá trình
thực hiện tính toán cực kỳ phức tạp, phức tạp đến mức ta coi là không thể đợc.
Hệ mật khoá công khai đã đáp ứng đợc những đòi hỏi đó. ý tởng nằm sau hệ mật
khoá công khai là ở chỗ nó có thể tìm ra một hệ mật trong đó không thể tính toán
để xác định d
k
khi biết e
k
. Quy tắc mã e
k
có thể công khai. Hàm mã hoá công khai
e
k
phải dễ dàng tính toán nhng việc giải mã phải khó đối với bất kỳ ngời nào
ngoài ngời lập mã. Tính chất dễ tính toán và khó đảo ngựơc này thờng đợc gọi là
tính chất một chiều. Muốn giải mã các thông báo nhận đợc một cách hiệu quả ta
cần có một cửa sập 1 chiều. Điều này đảm bảo độ bí mật cao.

Mặt khác, mã hoá còn bao gồm cả xác thực và chữ ký số. Xác thực có nh-
ợc điểm là ở đây 2 bên cùng có chung một khoá nên không thể phân xử đợc khi 1
trong 2 ngời chối bỏ thông báo họ đã gửi cho ngời kia. Hơn nữa, trong mạng có
nhiều ngời sử dụng, nếu mỗi cặp có một khoá thoả thuận nh vậy thì mỗi ngời
phải lu giữ n-1 khoá bí mật. Khi n đủ lớn, đó là một việc phiền phức, phức tạp.
Chính vì vậy mà chữ ký số đợc sử dụng nhiều hơn. Chữ ký số có nhiệm vụ giống
chữ ký tay nghĩa là nó dùng để thực hiện các chức năng xác nhận của một ngời
gửi trên một văn bản. Nó phải vừa mang dấu vết không chối cãi đợc của ngời gửi,
vừa gắn với từng bit của văn bản mà nếu thay đổi dù chỉ một bit của văn bản thì
chữ ký cũng không còn đợc chấp nhận. Nói chung các lợc đồ chữ ký thì không
cần đối thoại. Nhng trong một số trờng hợp để tăng thêm trách nhiệm trong việc
xác nhận, ngời ta dùng các giao thức hỏi- đáp để xác định độ tin cậy của chữ ký.
Trong đồ án này tôi đi sâu tìm hiểu về lợc đồ chữ ký chống chối bỏ có ngời
xác nhận. ở đây chữ ký có thể đợc kiểm tra mà không cần đến sự cộng tác của
ngời ký mà là một ngời thứ 3- ngời xác nhận.
Chơng I
- 2 -
Chữ ký số ngời xác nhận không thể chối bỏ
TổNG QUAN Về NGÔN NGữ C
I.1. Lịch sử hình thành và phát triển
Ngôn ngữ C do Brian W.Kernighan và Dennis M.Ritchie phát triển vào
đầu những năm 70 tại phòng thí nghiệm BELL ( Hoa Kỳ) với mục đích ban đầu
là để phát triển hệ điều hành UNIX. Bối cảnh ra đời xuất phát từ nhu cầu cần phải
có một ngôn ngữ lập trình hệ thống thay thế cho hợp ngữ (Assembly) vốn nặng
nề, độ tin cậy thấp và khó chuyển đổi giữa các hệ máy tính khác nhau.
Ngoài việc C đợc dùng để viết hệ điều hành UNIX, ngời ta nhanh chóng
nhận ra sức mạnh của C trong việc xử lý các vấn đề hiện đại của tin học: xử lý số,
văn bản, cơ sở dữ liệu, lập trình hớng đối tợng. C đã trở thành một chuẩn mặc
nhiên.
Liên quan đến sự hình thành và phát triển của ngôn ngữ, có thể kể đến

một số sự kiện sau:
- Năm 1978, cuốn giáo trình dạy lập trình bằng ngôn ngữ C The C
programming langguage do chính 2 tác giả của ngôn ngữ Brian W.Kernighan và
Dennis M.Ritchie biên soạn đã đợc xuất bản và đợc phổ biến rộng rãi.
- Năm 1983 một tiểu ban của viện tiêu chuẩn quốc gia Mỹ (ANSI) đợc
thành lập nhằm đề xuất ra một chuẩn cho ngôn ngữ C.
- Năm 1988 chuẩn ANSI C chính thức đợc ban hành. Chuẩn này bao gồm
các mô tả về ngôn ngữ theo Brian W.Kernighan và Dennis M.Ritchie và quy định
các th viện chuẩn của ngôn ngữ C, nhờ đó tăng tính khả chuyển của chơng trình
viết bằng C.
- Trong thế giới máy vi tính có các hệ chơng trình dịch C nổi tiếng nh:
Turbo C, Borland C của Borland Inc; MSC, VC của Microsoft Corp; Lattice C của
Lattice.
- 3 -
Chữ ký số ngời xác nhận không thể chối bỏ
I. 2. Các tính chất đặc trng của ngôn ngữ
C là một ngôn ngữ lập trình vạn năng đợc dùng để viết các hệ điều hành
nh UNIX cũng nh các chơng trình ứng dụng nh quản lý văn bản, cơ sở dữ liệu.
C là một ngôn ngữ có mức độ thích nghi cao, gọn và không nhất thiết phải
cần tới hợp ngữ.
C độc lập với bất kỳ kiến trúc máy đặc thù nào và với một chút thận trọng
vẫn dễ dàng viết đợc các chơng trình khả chuyển (portability) tức là những ch-
ơng trình có thể chạy mà không cần phải thay đổi gì khi có sự thay đổi về phần
cứng.
C đợc sử dụng rộng rãi trong các lĩnh vực chuyên nghiệp vì đáp ứng đợc
các yêu cầu: hiệu quả cao trong soạn thảo chơng trình và dịch ra mã máy; tiếp
cận trực tiếp với các thiết bị phần cứng.
C không đa ra các phép toán xử lý trực tiếp các đối tợng hợp thành nh là
đối tợng toàn vẹn; không xác định bất kỳ một phơng tiện cấp phát bộ nhớ nào
khác ngoài cấp phát tĩnh, cấp phát động theo nguyên tắc xếp chồng cho các biến

cục bộ của hàm; không cung cấp cơ chế I/O, không có phơng pháp truy nhập tệp.
Tất cả các cơ chế này đợc thực hiện bằng những lời gọi hàm trong th viện.
C đa ra các kết cấu điều khiển cơ bản cần cho các chơng trình có cấu trúc
nh: nhóm tuần tự các câu lệnh, chọn quyết định (if); chu trình với phép kiểm tra
kết thúc ở đầu (for, while), hoặc ở cuối (do...while); và việc lựa chọn một trong
các trờng hợp có thể (switch).
C cung cấp con trỏ và khả năng định địa chỉ số học. Các đối của hàm đợc
truyền bằng cách sao chép giá trị đối và hàm đợc gọi không thể thay đổi đợc giá
trị của đối hiện tại.
C cho phép hàm đợc gọi đệ quy và các biến cục bộ của hàm sẽ tự động
sinh ra hoặc tạo mới với mỗi lần gọi mới. Các định nghĩa hàm không
đợc lồng nhau nhng các biến có thể đợc khai báo theo kiểu cấu trúc khối. Các
hàm có thể dịch tách biệt. Các biến có thể trong hoặc ngoài hàm. Hàm chỉ
- 4 -
Chữ ký số ngời xác nhận không thể chối bỏ
biết đợc các biến ngoài trong cùng một tệp gốc, hoặc biến tổng thể extern. Các
biến tự động có thể đặt trong các thanh ghi để tăng hiệu quả, nhng việc khai báo
thanh ghi chỉ là một hớng dẫn cho chơng trình dịch và không liên quan gì đến các
thanh ghi đặc biệt của máy.
C không phải là một ngôn ngữ có kiểu mạnh mẽ theo nghĩa của PASCAL
hoặc ALGOL/68. Nó tơng đối thoải mái trong chuyển đổi dữ liệu nhng không tự
động chuyển các kiểu dữ liệu một cách phóng túng nh của PL/I. Các chơng trình
dịch hiện có đều không đa ra cơ chế kiểm tra chỉ số mảng, kiểu đối số
Mặc dù vậy, C vẫn còn tồn tại một số nhợc điểm nh một số phép toán có
thứ tự thực hiện cha đúng; một số phần cú pháp có thể làm tốt hơn; hiện có nhiều
phiên bản của ngôn ngữ, chỉ khác nhau ở một vài chi tiết.
Tóm lại, C vẫn tỏ ra là một ngôn ngữ cực kỳ hiệu quả và đầy sức diễn cảm
đối với nhiều lĩnh vực ứng dụng lập trình. Hơn nữa, ta biết rằng hệ mật chuẩn hay
chữ ký số luôn cần một bộ số rất lớn tức là kích cỡ của không gian khoá rất lớn
khoảng trên 300 số thập phân. Do đó, ngôn ngữ C đủ mạnh để có thể đáp ứng đợc

điều đó.
Chơng II
CHữ Ký Số
- 5 -
Chữ ký số ngời xác nhận không thể chối bỏ
II.1. Giới thiệu chung về chữ ký số
Nh chúng ta đã biết, chữ ký viết tay thờng lệ gắn với tài liệu đợc dùng để
chỉ ra ngời đã ký nó. Chữ ký đợc sử dụng hàng ngày nh để viết th, ký hợp đồng...
ở đây, chúng ta tìm hiểu về chữ ký hoàn toàn khác đó là chữ ký số. Nó là
phơng pháp ký thông báo đợc lu dới dạng điện tử và thông báo đợc ký có thể
truyền trên mạng máy tính. Chữ ký tay và chữ ký số dù cùng có nhiệm vụ chung
là ký nhng có sự khác nhau cơ bản giữa chúng.
Thứ nhất, về việc ký tài liệu: Với chữ ký tay thì chữ ký là bộ phận vật lý
của tài liệu đợc ký. Tuy nhiên, chữ ký số không gắn một cách vật lý với thông
báo đợc ký mà đợc gắn với thông báo theo logic, do đó thuật toán đợc dùng phải
trói chữ ký với thông báo theo một cách nào đó.
Thứ hai, về việc kiểm tra: chữ ký tay đợc kiểm tra bằng cách so sánh nó
với những cái khác, những chữ ký đã xác thực. Ví dụ, một ngời ký trên một tấm
séc mua hàng, ngời bán hàng phải so sánh chữ ký trên tấm séc với chữ ký nằm ở
sau thẻ tín dụng để kiểm tra. Tất nhiên, phơng pháp này không an toàn lắm vì nó
tơng đối dễ đánh lừa bởi chữ ký của ngời khác. Khác với chữ ký tay, chữ ký số có
thể đợc kiểm tra bằng cách dùng thuật toán kiểm tra công khai đã biết. Vì vậy,
bất kỳ ngời nào đó đều có thể kiểm tra chữ ký số. Và việc sử dụng lợc đồ ký an
toàn sẽ ngăn chặn khả năng đánh lừa.
Điều khác nhau cơ bản giữa chữ ký tay và chữ ký số là bản sao thông
báo số đợc ký là đồng nhất với bản gốc. Trong khi đó, bản sao chép tài liệu giấy
đã ký thờng là khác với bản gốc. Điều này nghĩa là phải cẩn thận để ngăn chặn
một thông báo đã ký số bị sử dụng lại. Ví dụ, nếu Bob ký thông báo số
cho quyền Alice rút $100 từ tài khoản ở nhà băng của mình, anh ta chỉ muốn
Alice làm việc đó một lần. Do đó, thông báo tự nó phải chứa thông tin để ngăn

chặn Alice làm lại việc đó nhiều lần.
Lợc đồ chữ ký số gồm 2 thành phần: một thuật toán ký và một thuật toán
kiểm tra. Bob có thể ký thông báo x nhờ thuật toán ký (bí mật) Sig. Chữ ký thu đ-
- 6 -
Chữ ký số ngời xác nhận không thể chối bỏ
ợc Sig(x) sau đó có thể đợc kiểm tra nhờ thuật toán kiểm tra công khai Ver. Khi
cho cặp (x,y) thuật toán kiểm tra sẽ trả lời đúng hoặc sai phụ thuộc vào việc
chữ ký có đích thực không?
II. 2. Định nghĩa lợc đồ chữ ký số
Lợc đồ chữ ký số là một bộ năm phần tử (P, A, K, S, V) thoả mãn các điều
kiện sau:
1. P _ là một tập hữu hạn các thông báo.
2. A _tập hữu hạn các chữ ký có thể.
3. K _tập hữu hạn các khoá, không gian khoá.
4. Với mỗi k K, sig
k
S và ver
k
V
Mỗi sig
k
: P A, ver
k
: P * A {true, false} là những hàm sao cho mỗi
bức điện x P và mỗi chữ ký y A thoả mãn:
Ver(x,y) =
( )
( )
.
,

,




=
xsigykhifalse
xsigykhitrue
*Yêu cầu:
- Với mỗi khoá k K, các hàm sig
k
và ver
k
là các hàm thời gian đa thức.
- Ver
k
là hàm công khai; sig
k
là hàm bí mật để tránh trờng hợp Orcar có thể giả
mạo chữ ký của Bob để ký thông báo x. Với mỗi x chỉ duy nhất Bob tính đợc chữ
ký y sao cho:
Ver(x, y) = True.
Lợc đồ chữ ký phải an toàn. Bởi vì Orcar có thể kiểm tra tất cả các khả năng của
chữ ký y nhờ thuật toán kiểm tra công khai Ver cho tới khi đạt đợc yêu cầu tức là
tìm đợc chữ ký đúng. Do đó, nếu có đủ thời gian cần thiết Orcar có
thể giả mạo đợc chữ ký của Bob. Vì vậy mục đích của chúng ta là tìm các lợc đồ
chữ ký sao cho Orcar không đủ thời gian thực tế để thử nh thế.
II. 3. Một vài lợc đồ chữ ký số
II.3. 1. Lợc đồ chữ ký số RSA
Lợc đồ chữ ký RSA đợc định nghĩa nh sau:

* Tạo khoá:
- 7 -
Chữ ký số ngời xác nhận không thể chối bỏ
Cho n = p. q; với p, q là các số nguyên tố lớn khác nhau, (n) = (p - 1)(q -
1). Cho P = A = Z
n
và định nghĩa:
K = {(n, p, q, a, b): n = p.q; p, q là các số nguyên tố; ab 1mod (n)}
Các giá trị n và b là công khai; các giá trị p, q, a là bí mật.
* Tạo chữ ký:
Với K = (n, p, q, a, b) xác định:
Sig
K
(x) = x
a
mod n
* Kiểm tra chữ ký:
Ver
K
(x, y) = true x y
b
mod n; x, y Z
n
.
Giả sử Bob muốn ký thông báo x, anh ta tính chữ ký y bằng cách:
y = sig
K
(x) = x
a
B

modn (a
B
là tham số bí mật của Bob).
Bob gửi cặp (x, y) cho Alice. Nhận đợc thông báo x và chữ ký số y, Alice tiến
hành kiểm tra đẳng thức:
x = y
b
B
modn (b
B
là khóa công khai của Bob)
Nếu đúng, Alice công nhận y là chữ ký trên x của Bob. Ngợc lại, Alice sẽ
coi x không phải của Bob gửi cho mình (chữ ký không tin cậy).
Ngời ta có thể giả mạo chữ ký của Bob nh sau: chọn y, sau đó tính x =
ver
K
(y), khi đó y = sig
K
(x). Một cách để khắc phục khó khăn này là việc yêu cầu
x phải có nghĩa. Do đó chữ ký giả mạo nói trên sẽ thành công với xác suất rất
nhỏ.
Ta có thể kết hợp chữ ký với mã hoá sẽ làm cho độ an toàn của chữ ký tăng
thêm.
Giả sử rằng, Alice sẽ tính chữ ký của cô ta là y = sig
Alice
(x), và sau đó mã
hoá cả x và y bằng cách sử dụng mật mã công khai e
Bob
của Bob, khi đó cô ta
nhận đợc z = e

Bob
(x, y). Bản mã z sẽ đợc truyền tới Bob. Khi nhận đợc z, việc trớc
- 8 -
Chữ ký số ngời xác nhận không thể chối bỏ
tiên là anh ta giải mã bằng hàm d
Bob
để nhận đợc (x, y). Sau đó anh ta sử dụng
hàm kiểm tra công khai của Alice để kiểm tra xem liệu ver
Alice
(x, y) = true?
Nếu Alice mã hoá x trớc rồi sau đó mới ký lên bản mã đã đợc mã hoá thì
sao? Khi đó cô ta tính:
y = sig
Alice
(e
Bob
(x))
Alice sẽ truyền cặp (z, y) cho Bob. Bob sẽ giải mã z, nhận đợc x và kiểm
tra chữ ký y trên bằng cách sử dụng ver
Alice
. Một vấn đề tiềm ẩn trong biện pháp
này là nếu Orcar có đợc cặp (z, y) kiểu này, anh ta có thể thay thế chữ ký y của
Alice bằng chữ ký của anh ta: y

= sig
Orcar
(e
Bob
(x))
Chú ý rằng Orcar có thể ký bản mã e

bob
(x) ngay cả khi anh ta không biết
bản rõ x.
Khi đó, nếu Orcar truyền (z, y

) tới Bob, chữ ký của Orcar sẽ đợc kiểm thử
vì Bob sử dụng ver
Orcar
, và Bob có thể suy ra rằng bản rõ x xuất phát từ Orcar.
Điều này cũng làm cho ngời sử dụng hiểu rằng nên ký trớc rồi sau đó mới tiến
hành mã hoá.
Ví dụ: Giả sử Bob dùng lợc đồ chữ ký số RSA với n = 247 (p = 13, q = 19);
(n) = 12.18 = 216. Khoá công khai của Bob là b = 7
a = 7
-1
mod216 = 31.
Bob công khai (n, b) = (247, 7).
Bob ký lên thông báo x = 100 với chữ ký:
y = x
a
modn = 100
31
mod247 = 74.
Bob gửi cặp (x, y) = (100, 74) cho Alice. Alice kiểm tra bằng cách sử dụng khoá
công khai của Bob nh sau:
x
= y
b
modn = 74
7

mod247 = 100 = x.
Alice chấp nhận y = 74 là chữ ký tin cậy.
II.3.2. Lợc đồ chữ ký ElGamal
Lợc đồ chữ ký số ElGamal đợc giới thiệu năm 1985 và đợc Viện tiêu
chuẩn và Công nghệ quốc gia Mỹ sửa đổi thành chuẩn chữ ký số. Lợc đồ
ElGamal không tất định cũng giống nh hệ thống mã hoá công khai ElGamal.
- 9 -
Chữ ký số ngời xác nhận không thể chối bỏ
Điều này có nghĩa là có nhiều chữ ký hợp lệ cho một thông báo bất kỳ. Thuật
toán kiểm tra phải có khả năng chấp nhận bất kỳ chữ ký hợp lệ nào khi xác minh.
Lợc đồ chữ ký số ElGamal đợc định nghĩa nh sau:
* Tạo khoá:
Cho p là số nguyên tố sao cho bài toán lôgarit rời rạc trong Z
p
là khó và giả
sử Z
*
p
là phần tử nguyên thủy.
Cho P = Z
*
p
, A = Z
*
p
ì Z
p-1
và định nghĩa:
K = {(p, a, , ): =
a

modp }.
Các giá trị p, , là công khai, a là bí mật.
* Tạo chữ ký:
Với K = (p, a, , ) và với số ngẫu nhiên k Z
*
1p
, định nghĩa:sig
k
(, ),
trong đó:
=
k
modp và = (x - a) k
-1
mod(p - 1).
* Kiểm tra chữ ký số:
Với x, Z
*
p
và Z
p-1
, ta định nghĩa:
Ver (x, , ) = True

.


x
modp.
Chứng minh:

Nếu chữ ký đợc thiết lập đúng thì kiểm tra sẽ thành công vì:





a.


r.

modp

x
modp ( vì a + r x mod(p - 1)).
Bob tính chữ ký bằng cách dùng cả giá trị bí mật a ( là một phần của khoá)
lẫn số ngẫu nhiên bí mật k (dùng để ký trên x). Việc kiểm ta có thể thực
hiện duy nhất bằng thông tin công khai.
Ví dụ: Giả sử p = 467, = 2, a = 127
Khi đó: =
a
modp = 2
127
mod467 = 132
- 10 -
Chữ ký số ngời xác nhận không thể chối bỏ
Giả sử Bob có thông báo x = 100 và anh ta chọn ngẫu nhiên k = 213 vì
(213, 466) =1 và 213
-1
mod466 = 431

Bob ký trên x nh sau:
=
k
modp = 2
213
mod467 = 29
và = (x - a)k
-1
mod(p -1) = (100 127. 29).431 mod466 = 51.
Chữ ký của Bob trên x = 100 là (29, 51).
Bất kỳ ngời nào đó cũng có thể kiểm tra chữ ký này bằng cách:
132
29
. 29
51
189 mod 467
2
100
189 mod 467
Do đó chữ ký là tin cậy.
Bây giờ, ta xét độ an toàn của lợc đồ chữ ký ElGamal.
Giả sử Orcar thử giả mạo chữ ký trên thông báo x cho trớc mà không biết
a. Nếu Orcar chọn giá trị và thử tìm tơng ứng, anh ta phải tính logarit rời rạc
của log


x

-


. Mặt khác, nếu anh ta chọn trớc và sau đó thử tìm thì anh ta phải
giải phơng trình




x
modp, trong đó là ẩn. Bài toán này cha có lời giải,
tuy nhiên dờng nh nó liên quan đến bài toán đã nghiên cứu. Vẫn còn có khả năng
là tìm và đồng thời để (, ) là chữ ký. Hiện thời không ai tìm đợc cách giải
song cũng không ai khẳng định đợc là nó không có lời giải.
Nếu Orcar chọn và , sau đó thử giải để tìm x, anh ta sẽ phải tính bài
toán logarit rời rạc, tức phải tính log





. Vì thế Orcar không thể ký một thông
điệp ngẫu nhiên bằng cách này. Tuy nhiên có một cách để Orcar ký lên thông
điệp ngẫu nhiên bằng việc chọn , , x đồng thời.
Giả thiết i và j là các số nguyên 0 i p 2; 0 j p 2 và (j, p - 1)
=1.
Khi đó thực hiện các phép tính:
=
i

j
modp
= -.j

-1
mod(p - 1)
- 11 -
Chữ ký số ngời xác nhận không thể chối bỏ
x = -
i
.j
-1
mod(p - 1) = i. mod(p - 1).
Trong đó j
-1
đợc tính theo module (p - 1). Ta thấy rằng (, ) là chữ ký hợp lệ của
x. Điều này đợc chứng minh qua việc kiểm tra:





-

(
i

j
)
-

i
j
1

modp



-i.j
1


-



-

.i.j
1
modp

x
modp.
Ví dụ: p = 467; = 2; = 132.
Giả sử Orcar chọn i = 99; j = 179, khi đó j
-1
mod(p -1) = 151. Anh ta tính:
= 2
99
132
179
mod467 = 117
= - 177. 151 mod466 = 41

x = 99. 41 mod 466 = 331
Và (117, 41 ) là chữ ký trên x = 331.
Kiểm tra:
132
117
117
41
303mod 467
và 2
331
303 mod467
Do đó chữ ký là hợp lệ.
Orcar có thể giả mạo chữ ký theo kiểu khác là bắt đầu từ thông báo x đã đ-
ợc Bob ký. Giả sử (, ) là chữ ký hợp lệ trên x. Khi đó Orcar có khả năng ký lên
nhiều thông báo khác nhau. Giả sử i, j, h là các số nguyên; 0 h; i, j p 2 và
(h - j, p - 1) = 1. Thực hiện các phép tính:
=
h

i

j
modp
à = (h - j)
-1
mod(p - 1)
x

= (hx + i)(h - j)
-1

mod(p - 1)
Trong đó (h - j)
-1
đợc tính theo module (p - 1).
Kiểm tra:


à

'
x
modp (, à) là chữ ký hợp lệ của x

.
- 12 -
Chữ ký số ngời xác nhận không thể chối bỏ
Cả 2 phơng pháp trên đều tạo các chữ ký giả mạo hợp lệ song không xuất
hiện khả năng đối phơng giả mạo chữ ký trên thông điệp có lựa chọn của chính
họ mà không phải giải bài toán logarit rời rạc. Vì thế không có gì nguy hiểm về
độ an toàn của lợc đồ ElGamal.
- 13 -
Chữ ký số ngời xác nhận không thể chối bỏ
Chơng III
Hàm Hash
III.1. Giới thiệu
Đối với xác thực và chữ ký số ta thấy rằng các thuật toán thờng nhận đầu
vào là một dòng bít có độ dài rất ngắn( 64,128,160 bit) và tốc độ thực hiện chậm.
Mặt khác, các thông báo cần ký thờng có độ dài khác nhau và trong nhiều trờng
hợp chúng có độ dài lớn cỡ vài Kilôbyte hoặc vài Megabyte. Do vậy, muốn ký
một chữ ký ngắn trên một thông báo dài ta cần phải cắt thông báo ra nhiều đoạn

có độ dài hữu hạn và cố định rồi tiến hành ký độc lập từng đoạn đó và gửi từng
đoạn đó đi. Khi đó lại xuất hiện nhiều vấn đề nh:
- Tốc độ thực hiện sẽ rất chậm vì phải ký trên quá nhiều đoạn.
- Dễ xảy ra trờng hợp không sắp xếp đợc thông báo theo đúng trật tự ban
đầu.
- Có thể bị mất các đoạn riêng biệt trong quá trình truyền tin.
Để giải quyết những vấn đề này ta có thể dùng hàm Hash. Hàm Hash chấp
nhận một thông báo có độ dài bất kỳ làm đầu vào, hàm Hash sẽ biến đổi thông
báo này thành một thông báo rút gọn, sau đó ta sẽ dùng lợc đồ chữ ký để ký
thông báo rút gọn.
Ta có mô hình chung nh sau:
Thông báo x độ dài tuỳ ý


Thông báo rút gọn z = h(x) 160 bit


Chữ ký y = sig
K
(x) 320 bit
- 14 -
Chữ ký số ngời xác nhận không thể chối bỏ
Nếu không cần bí mật x ta sẽ gửi cặp (x, y) cho ngời nhận. Nếu cần giữ bí
mật x thì ta sẽ mã hoá thông báo x thành x

và gửi cặp (x

, y).
III.2. Định nghĩa
Hàm Hash là một hàm tính toán có hiệu quả khi ánh xạ các dòng nhị phân

có độ dài tuỳ ý thành các dòng nhị phân có độ dài cố định nào đó.
- Hàm Hash yếu: Hàm Hash đợc gọi là yếu nếu cho một thông báo x thì về mặt
tính toán không tìm ra đợc thông báo x

khác x sao cho :
h(x

) = h(x)
- Hàm Hash mạnh: Hàm Hash đợc gọi là mạnh nếu về mặt tính toán không tìm ra
đợc hai thông báo x và x

sao cho:
x

x và h(x

) = h(x)
1. Chọn giá trị x ngẫu nhiên, x X
2. Tính z = h(x)
3. Tính x
1
= A(z)
4. Nếu x
1
x thì x
1
và x va chạm dới h( thành công)
Ngợc lại QUIT( thất bại)
- Hàm Hash có tính chất một chiều: Hàm Hash có tính chất một chiều nếu cho tr-
ớc thông báo rút gọn z thì về mặt tính toán không tìm ra đợc thông báo x sao cho

h(x) = z.
Hàm Hash yếu làm cho chữ ký số trở nên tin cậy giống nh việc ký trên
toàn thông báo.
Hàm Hash mạnh có tác dụng chống lại kẻ giả mạo tạo ra hai bản thông
báo có nội dung khác nhau, sau đó thu nhận chữ ký hợp pháp cho một bản thông
báo dễ đợc xác nhận rồi lấy nó giả mạo làm chữ ký của thông báo thứ 2.
III.3. Một số hàm Hash sử dụng trong chữ ký số
III.3.1. Các hàm Hash đơn giản
Tất cả các hàm Hash đều đợc thực hiện theo nguyên tắc chung là: Đầu vào
đợc biểu diễn dạng một dãy các khối có độ dài n bít. Các khối n bit này
- 15 -
Chữ ký số ngời xác nhận không thể chối bỏ
đợc xử lý theo cùng một kiểu và lặp đi lặp lại để cuối cùng cho đầu ra có số bit cố
định.
Hàm Hash đơn giản nhất là thực hiện phép toán XOR từng bit một của mỗi
khối. Nó đợc biểu diễn nh sau:
C
i
= b
1i
b
2i
b
mi
Trong đó:
C
i
: là bit thứ i của mã Hash, i =
n,1
m: là số các khối đầu vào.

b
ji
: là bit thứ i trong khối thứ j
: là phép cộng modulo 2.
Sơ đồ hàm Hash sử dụng phép XOR:
Khối 1: b
11
b
12
b
1n
Khối 1: b
21
b
22
b
2n

Khối m: b
m1
b
m2
b
mn
Mã Hash: C
1
C
2
C
n

C
i
là bit kiểm tra tính chẵn lẻ cho vị trí thứ i khi ta chia tệp dữ liệu thành từng
khối, mỗi khối có n vị trí. Nó có tác dụng nh sự kiểm tra tổng thể tính toàn vẹn
của dữ liệu.
Khi mã hoá một thông báo dài thì ta sử dụng mode CBC (The Cipher Block
Chaining), thực hiện nh sau:
Giả sử thông báo X đợc phân thành các khối 64 bit liên tiếp:
X = X
1
X
2
X
N
Khi đó mã Hash C là:
C = X
NH
= X
1
X
2
X
n.
Sau đó mã hoá toàn bộ thông báo nối với mã Hash theo mode CBC để sản
sinh ra bản mã:
- 16 -
Chữ ký số ngời xác nhận không thể chối bỏ
Y
1
Y

2
Y
N+1
III.3.2. Kỹ thuật khối xích
Ngời đầu tiên đề xuất kỹ thuật mật mã xích chuỗi nhng không có khoá bí
mật là Rabin.
Kỹ thuật này thực hiện nh sau:
Chia thông báo M thành các khối có cỡ cố định là M
1
, M
2
, ,M
N
. Sử dụng
hệ mã thuận tiện nh DES để tính mã Hash nh sau.
H
o
= Giá trị ban đầu
H
i
= E
Mi
(H
i-1
), i =
N,1
G = H
N
III.3.3. Các hàm Hash mở rộng
ở trên, ta đề cập tới hàm Hash có miền đầu vào hữu hạn. Tiếp theo ta sẽ đề

cập tới loại hàm Hash mạnh với đầu vào vô hạn thu đợc do mở rộng một hàm
Hash mạnh có đầu vào độ dài hữu hạn. Hàm này sẽ cho phép ký các thông báo có
độ dài tuỳ ý.
Giả sử h: (Z
2
)
m
(Z
2
)
t
là một hàm Hash mạnh, trong đó m t + 1. Ta sẽ
xây dựng hàm Hash mạnh:
h
*
: X (Z
2
)
t
, trong đó

=mi
X
= (Z
2
)
i
* Xét trờng hợp m t + 2
Giả sử x X, vậy thì tồn tại n để x (Z
2

)
n
, n m.
Ký hiệu:
x
là độ dài của x tính theo bit. Khi đó:
x
= n.
Ký hiệu: x y là dãy bit thu đợc do nối x với y.
Giả sử
x
= n m. Ta có thể biểu diễn x nh sau:
x = x
1
x
2
x
k
Trong đó
1
x
=
2
x
= =
1k
x
= m t 1 và
k
x

= m t 1 d,
0 d m t 2

k
x
1 và m t 1 1, k 2.
- 17 -
Chữ ký số ngời xác nhận không thể chối bỏ
Khi đó: k =






1tm
n
+ 1
Thuật toán xây dựng h thành h
*
đợc mô tả nh sau:
1. Cho i = 1 tới k 1 gán y
i
= x
i
;
2. y
k
= x
k

0
d
( 0
d
là dãy có d số 0. Khi đó y
k
dài m t - 1)
3. y
k+1
là biểu diễn nhị phân của d (
1+k
y
= m t - 1)
4. g
1
= h( 0
t+1
y
1
) (
1
g
= t, 0
t+1
y
1
dài m)
5. Cho i = 1 tới k thực hiên:
g
i+1

= h( g
i
1y
i+1
)
6. h
*
(x) = g
k+1
Ký hiệu y(x) = y
1
y
2
y
k+1
Ta thấy rằng y(x) y( x

) nếu x x

.
* Xét trờng hợp m = t + 1
Cũng nh trên, ta giả sử
x
= n > m
Ta xác định hàm f nh sau:
f(0) = 0;
f(1) = 01;
Thuật toán xây dựng h
*
khi m = t + 1 nh sau:

1. Cho y = y
1
y
2
y
k
= 11f(x
1
) f(x
2
) f(x
n
) (x
1
là một bit)
2. g
1
= h( 0
t
y
1
) (
1
y
= m t )
3. Cho i = 1 tới k 1 thực hiện
g
i+1
= h( g
i

y
i+1
) (
i
y
= m t - 1)
5. h
*
(x) = g
k
.
III.3.4. Hàm Hash MD4
Năm 1990, RIVEST đữ đề xuất hàm hash MD4, sau đó một phiên bản
mạnh hơn MD4 đã ra đời vào năm 1991 đó là MD5. Cùng thời điểm đó SHS
- 18 -
Chữ ký số ngời xác nhận không thể chối bỏ
(Secure Hash Standard) phức tạp hơn ra đời. Nhng MD5 và SHS đều dựa trên nền
tảng của MD4 và SHS đã đợc thừa nhận nh là một chuẩn hoá vào tháng 5 năm
1993.
Thuật toán thực hiện MD4:

- 19 -
Bớc Mô tả
1 A = 0x67452301
B = 0xefcdab89
C = 0x89badcfe
D = 0x10325476
2 For i: = 1 to N/16 do
3 For j: = 0 to 15 do X[j]: = M[16i + j]
4 AA: = A; BB: = B; CC: = C; DD: = D

5 Round1
6 Round2
7 Round3
8 AA: = A +AA; BB: = B + BB; CC: = C + CC;
DD: = D + Ddmod23
32
Chữ ký số ngời xác nhận không thể chối bỏ
Giải thích thuật toán thực hiện MD4:
Giả sử x là một thông báo cần hash. Đầu tiên bổ sung số 1 nối vào x, sau
đó là dãy các số 0 sao cho độ dài thu đợc đồng d với 448mod512. Cuối cùng, gắn
thêm 64 bit nữa vào để đợc thông báo mở rộng. Đây là 64 bit biểu diễn nhị phân
độ dài nguyên thuỷ của x. Kết quả ta đợc thông báo mở rộng M có độ dài chia
hết cho 512. Vì vậy khi cắt thành những từ có độ dài 32 bit ta sẽ đợc số N chia
hết cho 16.
Biểu diễn M đới dạng dãy liên tiếp N các từ có độ dài 32 bit:
M = M[0] M[1] M[N 1]
Do M chia hết cho 512 nên N chia hết cho 16.
Thuật toán xây dựng M trong MD4 nh sau:
Bớc 1: d = 447 (xmod512)
Bớc 2: Cho l biểu diễn nhị phân của xmod2
64
, l= 64
Bớc 3: M = x10
d
l
Trong khi xây dựng M chúng ta bổ sung l vào x và thêm toàn số 0 sao cho
độ dài đồng d với 448mod512 (độ dài mod512) và cuối cùng gắn thêm 64 bit
biểu diễn nhị phân độ dài nguyên thuỷ của x. Kết quả chuỗi M có độ dài chia hết
cho 512. Vì vậy khi cắt thành những từ có độ dài 32bit ta sẽ đợc số N chia hết
cho 16.

Chúng ta tiếp tục xây dựng thông báo rút gọn có độ dài 128 bit đợc mô tả
dựa trên thuật toán xây dựng M. Một thông điệp thu gọn đợc xây dựng nh một sự
ghép của 4 từ A, B, C, D. Các từ này gần tơng tự nh 4 thanh ghi trong máy tính.
- 20 -
Chữ ký số ngời xác nhận không thể chối bỏ
Các thanh ghi có giá trị khởi tạo từ bớc 1. Xử lý mảng M[] tại một thời
điểm, thực hiện 16 từ của M[] và lu trữ chúng trong mảng X[] tại bớc 3. Tại bớc 4
giá trị của A, B, C, D đợc lu trữ trong các biến AA, BB, CC, DD. Sau đó chúng ta
thực hiện 3 vòng lặp của hashing. Mỗi vòng thực hiện các phép toán số học và
logic trên 16 từ của X, các toán hạng này sau khi thực hiện trong 3 vòng sẽ cho
giá trị mới bằng cách cộng vào các giá trị đợc lu trữ trong bớc 4. Đây là phép
cộng các số nguyên đợc rút gọn bằng phép module 2
32
. Khi MD4 thực hiện đầy
đủ thì một điều cần thiết phải tính đến đó là cấu trúc của bộ vi xử lý trong máy
tính nhằm mục đích thực hiện các phép cộng chính xác nhất.
Trong 3 vòng Round1, Round2, Round3 của MD4 thực hiện các phép toán
logic sau:
+ a << s: phép quay vòng dịch trái đại lợng a đi s bit, 1 s 32
+ơa: phép đảo bit
+ : phép and
+ : phép or
+ : phép Xor
+ +: cộng 2 số nguyên theo module 2
32
Mỗi vòng chỉ sử dụng một trong 3 hàm f, g, h:
f(A, B, C) = (AB)(AC)
g(A, B, C) = (AB)(AC)(BC)
h(A, B, C) = A B C
Ta ký hiệu các hằng số:

K
1
= 0x5a827999
K
2
= 0x6ed9eba1
Các biến X
i
, i =
15,0
Bảng chân lý của 3 hàm:
A B C f(A, B, C) g(A, B, C) h(A, B, C)
- 21 -
Ch÷ ký sè ngêi x¸c nhËn kh«ng thÓ chèi bá
0 0 0 0 0 0
0 0 1 1 0 1
0 1 0 0 0 1
0 1 1 1 1 0
1 0 0 0 0 1
1 0 1 0 1 0
1 1 0 1 1 0
1 1 1 1 1 1
3 vßng Round1, Round2, Round3 ®îc m« t¶ theo b¶ng sau:
Round1:
1 A = (A + f(B, C, D) + X
o
)<<3
2 D = (D + f(A, B, C) + X
1
)<<7

3 C = (C + f(D, A, B) + X
2
)<<11
4 B = (B + f(C, D, A) + X
3
)<<19
5 A = (A + f(B, C, D) + X
4
)<<3
6 D = (D + f(A, B, C) + X
5
)<<7
7 C = (C + f(D, A, B) + X
6
)<<11
8 B = (B + f(C, D, A) + X
7
)<<19
9 A = (A + f(B, C, D) + X
8
)<<3
10 D = (D + f(A, B, C) + X
9
)<<7
11 C = (C + f(D, A, B) + X
10
)<<11
12 B = (B + f(C, D, A) + X
11
)<<19

13 A = (A + f(B, C, D) + X
12
)<<3
14 D = (D + f(A, B, C) + X
13
)<<7
15 C = (C + f(D, A, B) + X
14
)<<11
16 B = (B + f(C, D, A) + X
15
)<<19
Round2:
1 A = (A + g(B, C, D) + X
o
+ K
1
)<<3
2 D = (D + g(A, B, C) + X
4
+ K
1
)<<5
3 C = (C + g(D, A, B) + X
8
+K
1
)<<9
4 B = (B + g(C, D, A) + X
12

+ K
1
)<<13
5 A = (A + g(B, C, D) + X
1
+ K
1
)<<3
6 D = (D + g(A, B, C) + X
5
+ K
1
)<<5
7 C = (C + g(D, A, B) + X
8
+K
1
)<<9
- 22 -
Ch÷ ký sè ngêi x¸c nhËn kh«ng thÓ chèi bá
8 B = (B + g(C, D, A) + X
13
+ K
1
)<<13
9 A = (A + g(B, C, D) + X
2
+ K
1
)<<3

10 D = (D + g(A, B, C) + X
6
+ K
1
)<<5
11 C = (C + g(D, A, B) + X
10
+K
1
)<<9
12 B = (B + g(C, D, A) + X
14
+ K
1
)<<13
13 A = (A + g(B, C, D) + X
3
+ K
1
)<<3
14 D = (D + g(A, B, C) + X
7
+ K
1
)<<5
15 C = (C + g(D, A, B) + X
11
+K
1
)<<9

16 B = (B + g(C, D, A) + X
15
+ K
1
)<<13
Round3:
1 A = (A + h(B, C, D) +X
0
+ K
2
)<<3
2 D = (D + h(A, B, C) + X
8
+ K
2
)<<9
3 C = (C + h(D, A, B) + X
4
+ K
2
)<<11
4 B = (B + h(C, D, A) + X
12
+ K
2
)<<15
5 A = (A + h(B, C, D) +X
2
+ K
2

)<<3
6 D = (D + h(A, B, C) + X
10
+ K
2
)<<9
7 C = (C + h(D, A, B) + X
6
+ K
2
)<<11
8 B = (B + h(C, D, A) + X
14
+ K
2
)<<15
9 A = (A + h(B, C, D) +X
1
+ K
2
)<<3
10 D = (D + h(A, B, C) + X
9
+ K
2
)<<9
11 C = (C + h(D, A, B) + X
5
+ K
2

)<<11
12 B = (B + h(C, D, A) + X
13
+ K
2
)<<15
13 A = (A + h(B, C, D) +X
3
+ K
2
)<<3
14 D = (D + h(A, B, C) + X
11
+ K
2
)<<9
15 C = (C + h(D, A, B) + X
7
+ K
2
)<<11
16 B = (B + h(C, D, A) + X
15
+ K
2
)<<15
Ch¬ng IV
Ch÷ Ký Chèng Chèi Bá
- 23 -
Chữ ký số ngời xác nhận không thể chối bỏ

IV.1. Giới thiệu
Chữ ký chống chối bỏ đợc công bố bởi Chaum và van Antwerpen vào năm
1989. Nó có một số nét riêng mới lạ rất thú vị. Quan trọng nhất trong số đó là
chữ ký không thể kiểm tra khi không có sự cộng tác của ngời ký, Bob.
Sự bảo vệ này của Bob đề phòng khả năng chữ ký trong tài liệu của anh ta
bị sao chép và phân bố bởi thiết bị điện tử mà không có sự đồng ý của anh ta. Ví
dụ, Bob có một phần mềm và chữ ký kèm theo đợc tạo ra nhờ thuật toán của chữ
ký số thông thờng. Nh vậy, sẽ không tránh khỏi trờng hợp phần mềm đó bị sao
chép mà Bob không biết. Ngời mua sẽ kiểm tra chữ ký kèm theo phần mềm nhờ
thuật toán kiểm tra công khai Ver và công nhận đó là chữ ký đúng. Vì nh chúng
ta đã biết bản sao của chữ ký số là đồng nhất với bản gốc. Đơng nhiên nh vậy
Bob đã bị mất bản quyền. Để tránh điều bất lợi đó Bob đã dùng chữ ký số chống
chối bỏ. Sự kiểm tra sẽ thành công khi thực hiện giao thức hỏi - đáp.
Lợc đồ chữ ký chống chối bỏ gồm 3 phần: thuật toán ký, giao thức kiểm
tra, giao thức chối bỏ.
IV.2. Lợc đồ chữ ký chống chối bỏ
IV.2.1. Thuật toán ký
* Tạo khoá:
Cho p, q là các số nguyên tố lẻ sao cho p = 2q + 1 và bài toán rời rạc trên
Z
p
là khó. Lấy Z
p
*
là một phần tử của bậc q (Nếu
0
là phần tử nguyên thuỷ
của Z
p
thì =

0
(p -1)/q
modp). Lấy 1 a q-1 và xác định: =
a
modp.
Lấy G là phân nhóm nhân của Z
p
*
bậc q (G bao gồm các thặng d bậc 2 theo
modun p).
Lấy P = A = G, xác định:
K = { (p, , a, ): =
a
modp}
Các giá trị p, , là công khai, a là bí mật.
* Tạo chữ ký:
Với K = (p, , a, ) và x G, xác định chữ ký y trên thông báo x:
y = sig
k
(x) = x
a
modp
- 24 -
Chữ ký số ngời xác nhận không thể chối bỏ
IV.2.2. Giao thức kiểm tra
Với x, y G, sự kiểm tra đợc tiến hành theo giao thức sau:
1. Alice chọn e
1
, e
2

ngẫu nhiên, e
1
, e
2
Z
p
*
.
2 2. Alice tính c = y
1
e

2
e
modp và gửi nó cho Bob.
3. Bob tính d = c
qa mod
1
modp và gửi nó cho Alice.
3 4. Alice chấp nhận y là chữ ký đúng khi và chỉ khi:
d x
1
e

2
e
modp.
* Vai trò của p, q trong lợc đồ:
Lợc đồ nằm trong Z
p

; tuy nhiên chúng ta cần tính toán trong phân nhóm
nhân G của Z
p
*
của bậc nguyên tố lẻ. Đặc biệt, chúng ta cần tính phần tử nghịch
đảo theo modun G, điều này lý giải tại sao Gnên là nguyên tố lẻ. Nó thuận
tiện nếu lấy p =2q+1 với q là nguyên tố lẻ. Trong trờng hợp này, phân nhóm G là
tồn tại.
*Chứng minh bớc 4 của giao thức kiểm tra:
ở đây, chúng ta chứng minh rằng Alice sẽ chấp nhận chữ ký đúng. Trong
các phép toán dới đây, tất cả số mũ là biến đổi theo modun q.
Ta có: d c
1
a
modp
Mà c = y
1
e

2
e
modp
d y
1
e
1
a

2
e

1
a
modp (1)
Ta lại có:
a
modp

1
a
modp (2)
Tơng tự ta cũng có: y = x
a
modp
y
1
a
= x modp (3)
Thay (2), (3) vào (1) đợc:
d x
1
e

2
e
modp. _ Đó là điều phải chứng minh.
- 25 -

×