Tải bản đầy đủ (.pdf) (26 trang)

Chuẩn chữ ký số và ứng dụng

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 (605.63 KB, 26 trang )

Tên đề tài

CHUẨN CHỮ KÝ SỐ
VÀ ỨNG DỤNG
Giáo viên hướng dẫn : TS.Lê Phê Đô
Sinh viên thực hiện : Nguyễn Đình Lượng
Lớp CT702
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC DÂN LẬP HẢI PHÒNG
ISO 9001:2000
HẢI PHÒNG - 2007
MỤC ĐÍCH ĐỀ TÀI
Nghiên cứu về lý thuyết mật mã, chữ ký điện tử, Chuẩn hàm
băm an toàn và Chuẩn chữ ký số.
NỘI DUNG TRÌNH BÀY
Giới thiệu về NIST
Sơ lược hàm băm
Chuẩn hàm băm an toàn
Giới thiệu
Tiền xử lý
Các hàm sử dụng tính toán
Quy trình tính toán
Chuẩn chữ ký số
Giới thiệu
Các tham số của DSA
Lựa chọn kich thước các tham số
Tạo chữ ký số DSA
Xác nhận chữ ký số DSA
Giải thuật tạo các số nguyên tố p và q
Giải thuật xác suất Miller-Rabin kiểm tra tính nguyên tố
Giới thiệu về NIST


Viện chuẩn và công nghệ quốc gia NIST (the National
Institute of Standards and Technology), được thành lập
năm 1901, là một cơ quan quản trị công nghệ của bộ
thương mại Hoa Kì. Nhiệm vụ của Viện này là thúc đẩy
các đổi mới và nâng cao tính cạnh tranh công nghệ bằng
cách đưa ra khoa học đo lường, các chuẩn và công nghệ
tiên tiến theo cách làm tăng tính an toàn kinh tế và cải
thiện chất lượng cuộc sống.
Sơ lược hàm băm
Định nghĩa:
Hàm băm là một hàm h có ít nhất hai tính chất sau:
Tính chất nén: h sẽ ánh xạ một đầu vào x có độ dài bit hữu
hạn tùy ý tới một đầu ra h(x) có độ dài n bit hữu hạn.
Tính chất dễ dàng tính toán: Với h cho trước và một đầu vào
x, có thể dễ dàng tính được h(x).
Hàm băm yếu:
• Với y bất kỳ không thể tìm x sao cho h(x) = y.
• Với x bất kỳ không thể tím x’ sao cho h(x’) = h(x).
Hàm băm mạnh:
• Với x bất kỳ không thể tím x’ sao cho h(x’) = h(x).
• Không thể tìm x ≠ x’ sao cho h(x) = h(x’).
Chuẩn hàm băm an toàn (SHS)
Giới thiệu:
Chuẩn hàm băm an toàn SHS (Secure Hash Standard) được
NIST đưa ra lần đầu vào 11/5/1993 với phiên bản đầu là FIPS
PUB 180-1. Và phiên bản thứ2 là FIPS PUB 180-2, được đưa
ra vào ngày 1/8/2002.
Trong FIPS PUB 180-2 có 4 giải thuật hàm băm được đua ra
là SHA-1, SHA-256, SHA-384, SHA-512.
Bảng 1. Đặc điểm của các giải thuật hàm băm an toàn.

Tiền xử lý:
Độn bản tin
Giải sử thông điệp M có độ dài là l bit
- Với SHA-1 và SHA-256



l +1+k ≡ 448 mod 512
- Với SHA-384 và SHA-512



l +1+k ≡ 896 mod 512
Chuẩn hàm băm an toàn (SHS)
Biểu diễn nhị phân của M
l bit
1 00…00
k bit
Biểu diễn nhị phân của l
64 bit
Biểu diễn nhị phân của M
l bit
1 00…00
k bit
Biểu diễn nhị phân của l
128 bit
Tiền xử lý:
Phân phối bản tin độn
- Với SHA-1 và SHA-256
Bản tin độn sẽ được phân ra thành N khối 512 bít: M

(1)
,
M
(2)
,…, M
(N)
. Mỗi khối tin M
(i)
biểu diễn 16 từ-32 bít: M
0
(i)
,
M
1
(i)
,…, M
15
(i)
.
- Với SHA-384 và SHA-512
Bản tin độn được phân ra thành N khối 1024 bít. M
(1)
,
M
(2)
,…, M
(N)
. Mỗi khối tin M
(i)
có độ lớn 1024 bít có thể biểu

diễn thánh 16 từ-64 bít M
0
(i)
, M
1
(i)
,…, M
15
(i)
.
Chuẩn hàm băm an toàn (SHS)
Các hàm sử dụng tính toán
SHA-1:

f
t
(x, y, z) =

SHA-256
Ch( x, y, z) = ( x y) ( x z)
Maj( x, y, z) = ( x y) ( x z) ( y z)


SHA-348 và 512
Ch( x, y, z) = ( x y) ( x z)
Maj( x, y, z) = ( x y) ( x z) ( y z)















79t60 z yx z) y, Parity(x,
59t40 xzzy y) (x z) y, Maj(x,
39t20 z yx z) y, Parity(x,
19t0 )z x( y) (x z) y, Ch(x,
)()(
Chuẩn hàm băm an toàn (SHS)
)()()(
2213
256
0
2
xROTRxROTRxROTR 

)()()(
2511
256
1
6
xROTRxROTRxROTR 


)()()(
3187
256
0
xROTRxROTRxROTR 

)()()(
101917
256
1
xROTRxROTRxROTR 




















)()()(
3934
512
0
28
xROTRxROTRxROTR 

)()()(
4118
512
1
14
xROTRxROTRxROTR 

)()()(
781
512
0
xROTRxROTRxROTR 

)()()(
66119
512
1
xROTRxROTRxROTR 

Quy trình tính toán
SHA-1:
Chuẩn hàm băm an toàn (SHS)
BEGIN

M, H
(0)
, K, N

i=1
a = H
0
(i-1)
; b = H
1
(i-1)
; c = H
2
(i-1)
;
d = H
3
(i-1)
; e = H
4
(i-1)










79 16 )(
15 0
1683
1
tWWWROTL
tM
W
ttt
i
t
t
1
In H
0
(N)
|| … || H
4
(N)

2
t=0
T = ROTL
5
(a) + f
t
(b, c, d) +e + K
t
+ W
t
;

e = d ; d = c; c = ROTL
30
(b);
b = a; a = T
t ≤ 79
1
H
0
(i)
= a + H
0
(i-1)
; H
1
(i)
= b + H
1
(i-1)
;
H
2
(i)
= c + H
2
(i-1)
; H
3
(i)
= d + H
3

(i-1)
;
H
4
(i)
= e + H
4
(i-1)

i ≤ N
Đúng
Sai
Đúng
Sai
END
t=t+1
2
i=i+1
Đúng
   









79) (16 )( )(

15) (0
1615
256
072
256
1
tWWWW
tM
W
tttt
i
t
t

Quy trình tính toán
SHA-256:
Chuẩn hàm băm an toàn (SHS)
BEGIN
M, H
(0)
, K, N

i=1
a = H
0
(i-1)
; b = H
1
(i-1)
; c = H

2
(i-1)
;
d = H
3
(i-1)
; e = H
4
(i-1)
; f = H
5
(i-1)
;
g = H
6
(i-1)
; h = H
7
(i-1)
1
2
2
t=0
T
1
= h + + Ch(e, f, g) + K
t
{256}
+ W
t

;
T
2
= + Ch(e, f, g) + K
t
{256}
+ W
t
;
h = g; g = f; f = e; e = d + T
1
; d = c;
c = b; b = a; a = T
1
+ T
2

t ≤ 79
1
H
0
(i)
= a + H
0
(i-1)
;H
1
(i)
= b + H
1

(i-1)
H
2
(i)
= c + H
2
(i-1)
;H
3
(i)
= d + H
3
(i-1)
H
4
(i)
= e + H
4
(i-1)
;H
5
(i)
= g + H
5
(i-1)
H
6
(i)
= f + H
6

(i-1)
;H
7
(i)
= h + H
7
(i-1)
i ≤ N
Đúng
Sai
Sai
END
t=t+1

256
1
)(e

256
0
)(e
In H
0
(N)
|| … || H
7
(N)

i=i+1
Đúng

   









79) t (16 W )W( W)W(
15) t (0 M
W
tttt
i
t
t
1615
512
072
512
1

Quy trình tính toán
SHA-512:
Chuẩn hàm băm an toàn (SHS)
BEGIN
M, H
(0)
, K, N


i=1
a = H
0
(i-1)
; b = H
1
(i-1)
; c = H
2
(i-1)
;
d = H
3
(i-1)
; e = H
4
(i-1)
; f = H
5
(i-1)
;
g = H
6
(i-1)
; h = H
7
(i-1)
1
In H

0
(N)
|| … || H
7
(N)

2
t=0
T
1
= h + + Ch(e, f, g) + K
t
{512}
+ W
t
;
T
2
= h + + Ch(e, f, g) + K
t
{512}
+ W
t
;
h = g; g = f; f = e; e = d + T
1
; d = c;
c = b; b = a; a = T
1
+ T

2

t ≤ 79
1
H
0
(i)
= a + H
0
(i-1)
;H
1
(i)
= b + H
1
(i-1)
H
2
(i)
= c + H
2
(i-1)
;H
3
(i)
= d + H
3
(i-1)
H
4

(i)
= e + H
4
(i-1)
;H
5
(i)
= g + H
5
(i-1)
H
6
(i)
= f + H
6
(i-1)
;H
7
(i)
= h + H
7
(i-1)
i ≤ N
Đúng
Sai
Sai
END
t=t+1

512

1
)(e

512
0
)(e
2
i=i+1
Quy trình tính toán
SHA-348:
Giải thuật này được định nghĩa giống y hệt với giải thuật SHA-
512 trừ hai điểm khác biệt duy nhất sau:
- Giá trị băm khởi tạo H
(0)
của SHA-384 khác với giá trị khởi
tạo H
(0)
của SHA-512.
- Thông điệp rút gọn của SHA-384 là: H
0
(N)
|| H
1
(N)
|| H
2
(N)
||
H
3

(N)
|| H
4
(N)
|| H
5
(N)
thay vì là giữ nguyên toàn bộ tất cả các bit
của H
(N)
như SHA-512.
Chuẩn hàm băm an toàn (SHS)
Giới thiệu
Để nâng cấp việc sử dụng thương mại điện tử của quốc gia
và trong việc giao dịch, Viện tiêu chuẩn và công nghệ quốc gia
Hoa kỳ (NIST) đã đưa ra chuẩn xử lý thông tin FIPS 186 là
chuẩn chữ ký số (DSS - Digital Signature Standard) vào ngày
19/5/1994 và được chấp nhận từ ngày 1/12/1994.
Phiên bản đầu tiên của chuẩn chữ ký số là FIPS PUB 186,
phiên bản tiếp theo là FIPS PUB 186-1 được đưa ra vào ngày
15/12/1998, phiên bản thứ 3 là FIPS PUB 186-2 đưa ra vào
ngày 27/1/2000 và phiên bản mới nhất hiện nay là FIPS PUB
186-3 được công bố vào tháng 3/2006.
Chuẩn chữ ký số (DSS)
Giới thiệu

Chuẩn chữ ký số (DSS)
Giới thiệu

Chuẩn chữ ký số (DSS)

Các tham số của DSA
• p: là một số nguyên tố trong đó 2L-1 < p < 2L với L là độ dài
bit của biến p.
• q: là một ước số nguyên tố của p-1 trong đó 2N-1< p < 2N
với N là chiều dài của biến q(tính theo bít).
• g: là căm bậc q của 1 theo modulo p. Dễ dàng tính được g
như sau: g = h
(p-1)/q
mod p. Với 1< h < p-1
• x: là khóa bí mật. x là một số nguyên dương được tạo ra một
cách ngẫu nhiên sao cho 0< x < q-1.
• y: là khóa công khai, trong đó y = g
x
mod p.
• k: là số bí mật và là duy nhất với mỗi một tin nhắn. k là số
nguyên được tạo ra ngẫu nhiên sao cho 0 < k < q.
Chuẩn chữ ký số (DSS)
Lựa chọn kích thước các tham số p và q
Chuẩn này đưa ra một số lựa chọn cho cặp (L, N) như sau:
(L = 1024, N = 160), (L = 2048, N = 224) và (L = 3072, N =
256)
Chuẩn chữ ký số (DSS)
Tạo chữ ký số DSA
Chữ ký trên thông điệp M là một cặp số (r, s) được tính toán
như sau:
r = (g
k
mod p) mod q.
s = k
-1

(z + x.r) mod q.
Với z = N bít trái nhất của hàm Hash(M).
Giá trị của r và s sẽ được kiểm tra để xem chúng có bằng 0
hay không. Nếu một trong hai giá trị này bằng không thì bên
ký sẽ phải tạo ra một giá trị k khác và chữ ký số sẽ phải được
tính toán lại.
Chuẩn chữ ký số (DSS)
Xác nhận chữ ký số DSA
Đặt M’, r’, s’ là thông điệp và chữ ký cần đi xác nhận. Đặt y
là khóa công khai của người tuyên bố đã tạo ra chữ ký. Qui
trình xác nhận chữ ký được thực hiện như sau:
w = (s’)
-1
mod q.
z = N bít trái nhất của Hash(M’).
u
1
= z.w mod q.
u
2
= r’.w mod q.
v = (g . y mod p) mod q.
Nếu v = r’ thì chữ ký số được xác nhận.
Chuẩn chữ ký số (DSS)
1
u
2
u
Giải thuật tạo các số nguyên tố p và q
Chuẩn chữ ký số (DSS)

BEGIN
L, N, seedlen
kiểm tra L, N
domain_parameter_seed=RBG(seedlen)
U = Hash(domain_parameter_seed) mod 2
N

q = U 2
N-1
1


q ? nguyên tố
n = L / outlen - 1;
b = L - 1 - (n * outlen)
1
Hợp lệ
END
In “Không hợp lệ”
Không hợp lệ
5
Đúng Sai
Giải thuật tạo các số nguyên tố p và q
Chuẩn chữ ký số (DSS)
1
offset=1
counter=0
j=0
V
j

= Hash ((domain_parameter_seed + offset + j)
mod 2
seedlen
)
W = V
0
+ (V
1
* 2
outlen
) + + (V
n-1
* 2
(n-1) * outlen
)
+ ((V
n
mod 2b) * 2
n * outlen
)
X = W + 2L-1
c = X mod 2q
p = X - (c - 1)
j=j+1
j≤n
p<2
L-1

p ? nguyên tố
offset=offset+n+1

counter≤4095
5
3
3
Đúng
Sai
Đúng
Sai
Đúng
Sai
Đúng
Sai
4
Giải thuật tạo các số nguyên tố p và q
Chuẩn chữ ký số (DSS)
4
In p,q, domain_parameter_seed,
counter
END
Giải thuật xác suất Miller-Rabin kiểm tra tính nguyên tố
Chuẩn Miller-Rabin như sau: cho n là số nguyên lẻ thỏa mãn
n-1 = 2e.u, với u là số nguyên tố.
• Nếu n là số nguyên tố, thì với mọi số nguyên dương a với 0
≤ a ≤ n -1:
(a
u
≡ 1 mod n) hoặc  k < e sao cho a ≡ -1 mod n (*)
• Nếu n là hợp số thì
{a: 1 ≤ a ≤ n-1, a
u

≡ 1 mod n hoặc k < e(a ≡ -1 mod n)} ≤
Tức là khi số nguyên lẻ n có dạng thỏa mãn n-1 = 2
e.
u với u
là số nguyên tố thì nếu n là số nguyên tố, nó luôn thỏa mãn
tính chất(*) còn khi n là hợp số thì chỉ có thể tìm được tối đa là
số nguyên a để thỏa mãn tính chất(*). Tính chất(*) đó là
hoặc a
u
≡ 1 mod n, nếu không thì sẽ tồn tại một số k thỏa mãn
a ≡ -1 mod n.
Chuẩn chữ ký số (DSS)
u
k
.2
4
1n
4
1n
u
k
.2
Giải thuật xác suất Miller-Rabin kiểm tra tính nguyên tố
Chuẩn chữ ký số (DSS)
BEGIN
w, iteration
b=RBG(wlen)
b≤ 1 or b≥ w-1
z = b
m

mod w
z=1 or z= w-1
j=1
z = z
2
mod w
z= w-1
z= 1
i< iteration
j < a
j=j+1
1
i=i+1
2
2
In “Nguyên tố”
In “Hợp số”
1
END
a là số nguyên lớn nhất thỏa mãn: w-1 = 2
a
;
m = (w-1) / 2
a
; wlen = len(w); i=0

Đúng
Sai
Đúng
Sai

3
Đúng
3
Đúng
Đúng
Đúng
Sai
Sai
Sai
Sai

×