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

BÁO CÁO TIỂU LUẬN MẬT MÃ VÀ AN TOÀN DỮ LIỆU Chữ ký số trên âm thanh số

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 (1.7 MB, 34 trang )

1
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

BÁO CÁO TIỂU LUẬN
MẬT MÃ VÀ AN TOÀN DỮ LIỆU
Đề tài :
Chữ ký số trên âm thanh số
Giảng viên hướng dẫn : PGS.TS. Trịnh Nhật Tiến
Sinh viên thực hiện : Bùi Trung Hiếu
HÀ NỘI 5 – 2014
Mục lục
Mục lục 2
GIỚI THIỆU 2
TÀI LIỆU THAM KHẢO 33
GIỚI THIỆU
Trong những năm gần đây, mạng internet phát triển mạnh cùng với việc chia sẻ
thông tin, lan truyền tập tin âm thanh trên mạng. Nhưng môi trường mạng internet là
môi trường hỗn hợp của nhiều mạng, nhiều loại thông tin. Do vậy, vấn đề bản quyền
thông tin, xác định nguồn của thông tin, cụ thể ở đây là âm thanh số là một điều mới
mẻ và chưa được triển khai rộng rãi ở Việt Nam. Chữ ký điện tử còn khá mới, chỉ được
triển khai ở một số ít các doanh nghiệp tư, cơ quan hải quan, cơ quan thuế của Chính
phủ, mới chỉ được áp dụng trên tập tin văn bản, tập tin ảnh số.
Trong tiểu luận này, tôi tập trung trình bày những kiến thức cơ bản nhất về đặc
trưng dữ liệu âm thanh, hàm băm, chữ ký số và ứng dụng chữ ký số trên âm thanh
số.
Mặt dù đã hết sức cố gắng, nhưng do thời gian có hạn, cùng sự hạn chế của bản
thân nên đề tài còn nhiều thiếu sót. Rất mong nhận được ý kiến đóng góp của thầy cô
và các bạn.
2
I. ĐẶC TRƯNG CỦA DỮ LIỆU ÂM THANH


Âm thanh số (digital audio) là kết quả của quá trình biến đổi từ sóng âm thanh
thành tín hiệu số. Sóng âm thanh là các sóng cơ học có dạng hình sin tuần hoàn liên
tục (analog), trong khi “âm thanh số” chỉ là những xung điện từ rời rạc (digital). Do
đó, bằng những “mẩu” rời rạc, âm thanh số chỉ có thể mô phỏng một cách gần giống
nhất với âm thanh thực tế mà thôi. Việc mô phỏng đó được đặc trưng bởi các thông
số sau:
- Bit Rate: Là thông số thu gọn, đại diện cơ bản cho các thuộc tính trên, Bit
Rate có đơn vị Kbps (Kilobits per second) – dung lượng (tính theo bit) của
âm thanh số trên một giây. Với Bit rate, ta có thể xác định nhanh chóng
dung lượng cũng như phần nào chất lượng của bản âm thanh. Một phút
nhạc 128 Kbps có dung lượng khoảng 1Mb và bản nhạc 320 Kbps thì chắc
chắn sẽ hay hơn bản nhạc 128 Kbps.
- Sample: Là một bộ phận của âm thanh analog được mã hóa thành dạng số.
Sample có thể dùng để chỉ một điểm đơn lẻ trong stream âm thanh số (là
đơn vị nhỏ nhất của dữ liệu dùng để biểu diễn một tín hiệu âm thanh tại
một khoảng thời gian nhất định). Một âm thanh hoàn chỉnh hay toàn bộ
một stream âm thanh số được cấu tạo từ việc kết hợp những sample riêng
biệt (một chuỗi sample) cũng có thể được coi là một sample.
- Sample Rate: Là số sample (tạm dịch là mẫu) trong một khoảng thời gian
nhất định (thường là 1 giây) của âm thanh kỹ thuật số, quyết định trực tiếp
tới chất lượng âm thanh. Khi một tập tin âm thanh số được ghi lại, nó phải
được convert vào một chuỗi những mẫu (series of sample) mà bản thân
chúng có thể lưu lại được trên bộ nhớ, trên các thiết bị lưu trữ kỹ thuật số.
3
Sample rate sẽ thông báo cho ta biết trong tập tin âm thanh có bao nhiêu
mẫu được ghi lại trong một giây. Đơn vị của sample rate là Hz.
Ví dụ dễ hiểu, một tập tin âm thanh được ghi ở sample rate 44100 sẽ cần đến
44100 mẫu/giây để lưu giữ âm thanh trong một chuỗi mẫu.
Sample rate càng cao, chất lượng của chuỗi mẫu càng tốt và càng ít xảy ra
hiện tượng gọi là aliasing (là hiện tượng xuất hiện những tần số âm thanh không

mong muốn sinh ra bởi việc thiếu hụt thông tin từ sample rate). Mỗi mẫu sẽ cần một
lượng bit nhất định để lưu trữ gọi là sample size, và ta có thể tính toán dung lượng
cần thiết cho một sample.
Ví dụ: với âm thanh 16 bit, ta cần sử dụng 16 bit hay 2 byte cho một mẫu (8
bit = 1 byte). Như vậy 1 giây âm thanh với sample rate 44100/16 bit mono (một
kênh âm thanh) sẽ có độ lớn là 44100x2 = 88200 byte.
Nếu cũng với các thông số như vậy nhưng thay vì mono, ta sử dụng stereo (2
kênh âm thanh), dung lượng sẽ phải nhân đôi và trở thành 176400 byte. Đây là lý do
vì sao âm thanh vòm (5.1) hay các loại âm thanh sử dụng nhiều kênh khác (6.1, 7.1,
…) lớn hơn rất nhiều so với âm thanh stereo hay mono mặc dù chúng cũng được nén
ở cùng chất lượng.
- BitDepth: Để lưu lại dưới dạng số, mỗi mẫu được biểu diễn bằng một
lượng bit dữ liệu nhất định, gọi là Bit Depth. Các bản nhạc hiện nay thường
có Bit Depth là 16 bits, 24 bits… Bit Depth càng lớn âm thanh càng sắc
nét, trung thực nên nó còn được gọi là Resolution (độ nét).
- Kênh âm thanh (Channel): Bằng các thuật toán, tín hiệu số sẽ được tách ra
thành nhiều kênh sao cho khi nghe bằng hệ thống loa thích hợp sẽ có cảm
giác như khi đang nghe nhạc trong không gian thực tế.
4
- Âm thanh Lossy, lossless và uncompressed
Âm thanh uncompressed là loại âm thanh không áp dụng bất kỳ một phương
pháp nén nào. Được sử dụng dưới định dạng WAV hay PCM.
Âm thanh lossless là loại âm thanh sử dụng phương pháp loại bỏ những dữ
liệu không liên quan tồn tại trong file gốc để thu được một file nhỏ hơn nhưng vẫn
giữ được chất lượng như ban đầu. Âm thanh xử lý lossless sẽ có bit rate thấp hơn so
với âm thanh chưa nén. Âm thanh lossless được sử dụng rộng rãi và phát triển thành
những định dạng quen thuộc như AC3, AAC, DTS, MPEG-1/2/3, Vorbis, Real
Audio…
Âm thanh lossy là loại âm thanh thu được khi sử dụng những phần mềm
encode âm thanh phổ biến hiện nay để chuyển đổi các định dạng âm thanh. Đây là

loại âm thanh bị giảm chất lượng vì quá trình lossy encode sẽ không giữ nguyên
những phần cần thiết trong file âm thanh gốc. Lấy ví dụ, khi encode từ WAV sang
MP3, bạn đã thực hiện phương pháp lossy encode cho file âm thanh WAV chưa nén
của mình, và file MP3 thu được đã bị giảm chất lượng so với file gốc, nó là âm thanh
lossy. Mọi chuyện thậm chí còn tồi tệ hơn với việc encode file MP3 lossy đó thành
OGG (có thể là định dạng khác), file OGG thu được đã bị quá trình encode lossy
giảm chất lượng tới 2 lần.
- Các dạng bit rate CBR/ABR/VBR
CBR-Constant bit rate: nghĩa là bit rate của stream là một hằng số và không
thay đổi tại bất kỳ điểm nào của stream.
ABR-Average bit rate: nghĩa là stream có thể sử dụng bit rate thay đổi cho mỗi
frame, nhưng bit rate trung bình của toàn bộ stream là cố định.
VBR-Variable bit rate: nghĩa là stream có thể sử dụng bit rate thay đổi cho
mỗi frame và tùy biến để đạt được bit rate cần thiết cho mỗi frame, vì vậy bit rate
trung bình không thể xác định trước khi encode hay tính toán cụ thể.
- Âm thanh Stereo, joint stereo, và dual channel
Dual channel tích hợp bởi 2 kênh mono, nghĩa là mỗi kênh sẽ được encode với
một nửa của toàn bộ bit rate.
Stereo tích hợp bởi 2 kênh âm thanh độc lập với nhau. Bit rate cung cấp giữa 2
kênh âm thanh thay đổi phù hợp với lượng thông tin được chứa trong mỗi kênh.
5
Joint stereo cũng tích hợp 2 kênh âm thanh nhưng có một bước tiến xa hơn vì
có thể sử dụng được những mẫu chung thường xuất hiện ở cả 2 kênh. Do đó độ nén
sẽ tốt hơn so với stereo bình thường.
II. XỬ LÝ TÍN HIỆU SỐ
2.1. Đại cương về tín hiệu và nhiễu
a) Khái niệm tín hiệu
Tín hiệu là sự biên thiên của biên độ theo thời gian. Biên độ có thể là
điện áp, dòng điện, công suất… nhưng thường được hiểu là điện áp. Các yếu tố trong
tín hiệu mà chúng ta thường nhắc tới là biên độ và thời gian.

Ví dụ: Xét sóng của tín hiệu x = sin (2*pi*100*t).
b) Khái niệm nhiễu
Nhiễu là tín hiệu do chính bản thân mạch điện từ và môi trường truyền
thông phát sinh ra. Giảm nhiễu hoặc khử nhiễu là thao tác chính trong xử lý tín hiệu
số. Nhiễu trắng là nhiễu có độ lớn như nhau ở mọi tần số (trên lý thuyết), trong thực
tế chúng ta chỉ xét trong phạm vị giới hạn băng tần khá rộng hay nói đúng hơn nhiễu
trắng là tín hiệu có mật độ công suất phổ (PSD) cố định ở mọi băng tần.
6
Có hai loại phân bổ xác suất của nhiễu thường nhắc tới là nhiễu phân bố
đều và nhiễu Gauss.
+ Phân bố đều là phân bố có hàm mật độ PDF f(x) không đổi trong
khoảng biến thiên của biến số x, có giá trị kỳ vọng là µ=0.
+ Phân bố Gauss là phân bố chuẩn. Dạng nhiễu phổ biến nhất trong thực
tế là nhiễu trắng có phân bổ Gauss.
c) Phân loại tín hiệu
Tùy theo từng tiêu chuẩn mà có nhiều cách phân loại khác nhau:
+ Dạng sóng: tín hiệu sin, vuông, tác giác, xung…
+ Tần số: hạ tần, cao tần (HF), âm tần (AF), siêu cao tần (VHF)…
+ Sự liên tục: tín hiệu liên tục, tín hiệu rời rạc.
+ Tính xác định: tín hiệu xác định, tín hiệu ngẫu nhiên.
2.2. Phân tích Fourier
a) Biến đổi Fourier rời rạc (DFT)
7
Tín hiệu tuần hoàn rất ít gặp trong thực tế, trong khi đó tín hiệu không
tuần hoàn và có số mẫu giới hạn lại thường xảy ra. Đối với các tín hiệu này lại không
phù hợp với phép biển đổi Fourier rời rạc theo thời gian. Do đó đối với tín hiệu
không tuần hoàn có độ dài hữu hạn N, người ta thường xem nó như là tín hiệu tuần
hoàn ở chu kỳ N, theo định nghĩa Fourier rời rạc của tín hiệu ta có:
Với k = 0,1,…,N-1. Đây là phép biến đổi Fourier thuận, ký hiệu DFT.
X

K
được gọi là hệ số phổ.
Ngược lại, tín hiệu tổng hợp từ các hệ số phổ là:
Với n = 0, 1, …, N-1.
Đây là phép biển đổi Fourier ngược, ký hiệu là IDFT.
b) Biến đổi Fourier nhanh (FFT)
Biểu thức DFT và IDFT chỉ thực hiện trên các phép nhân và phép cộng nhưng
vì có quá nhiều phép toán nên cần nhiều thời gian xử lý. Tuy nhiên một lợi điểm là
trong DFT và IDFT có hàm mũ, sin, cosin dẫn tới nhiều trùng lặp trong các phép
tính. FFT là thuật toán để tính nhanh DFT và IDFT. Vì có nhiều thuật toán FFT nên
có nhiều tên gọi khác nhau.
Xét biểu thức DFT
Vậy phần thực, phần ảo, biên độ và pha lần lượt là
8
c) Ứng dụng
* Phân tích phổ - rò rỉ phổ
Phân tích phổ số là phân ly tín hiệu số thành các thành phần tần số. Đây
là một kỹ thuật rất hữu ích trong khoa học công nghệ. Chúng ta nên phân biệt phân
tích phổ và lọc, phân tích phổ đơn giản là phân tích, kiểm nghiệm tín hiệu chứ không
lọc. Đối tượng của phân tích phổ là các tín hiệu trong tư nhiên như là: tiếng nói, tín
hiệu địa chất, tín hiệu sinh học, dữ liệu thị trường. Phân tích phổ còn được áp dụng
cho việc khảo sát các hệ thống như hệ thống lọc.
Lọc tín hiệu ra khỏi miền nhiễu dùng DFT và FFT là cách hiệu quả để
phát hiện tín hiệu chìm trong nền nhiễu. Ví dụ: một tín hiệu sóng vuông bị chìm
trong nhiễu, bề ngoài chúng ta rất khó xác định được chúng. Qua FFT, năng lượng
tín hiệu sẽ tập trung ở một số phổ vạch, còn nhiễu thì trải rộng, nhờ đó chúng ta có
thể phát hiện ra tín hiệu.
* Đáp ứng của sổ
Biến đổi Fourier là phương pháp cơ bản để thiết kế các lọc phổ phi đệ
quy.

Gọi G(Ω) là đáp ứng tần số được yêu cầu và H(Ω): xung của hệ thống.
Đối với G(Ω) đáp ứng xung được cho bởi biểu thức Fourier như sau:
Xem mạch lọc là thông thấp lý tưởng tức là G(Ω) = 1 khi - Ω
C
< Ω < Ω
C
, ngược lại thì G(Ω) = 0.
* Độn không
Đây là thao tác thực hiện chèn bít 0 vào các thành phần trống của tín
hiệu sau khi thực hiện lọc qua cửa sổ.
9
* Nhân chập nhanh
Giúp thực hiện nhanh các thao tác tính toán nhân chập trên tín hiệu.
* Đáp ứng xung
Lưu ý:
Đáp ứng xung của hệ thống H là tín hiệu ra h(t), tín hiệu vào là một
xung lực đơn vị ∂(t). Vì xung lực ở t=0 nên đáp ứng xung cũng bắt đâu ở t=0.
Đáp ứng xung:
2.3. Lý thuyết trải phổ
a) Định nghĩa trải phổ
Trải phổ là kỹ thuật truyền tín hiệu, được sử dụng rộng rãi trong truyền
thông. Trong đó năng lượng của tín hiệu được “trải” trên một băng thông rộng hơn
nhiều lần lượng băng thông cần thiết tối thiểu nhờ sử dụng mã giả ngẫu nhiên, mã
này độc lập với tín hiệu thông tin. Bên nhận thông tin sẽ tiến hành “giải trải” bằng
cách đồng bộ hóa mã giả ngẫu nhiên.
Có 4 kiểu trải phổ:
• Trải phổ trực tiếp
• Nhẩy tần
• Nhẩy thời gian
• Hệ lai

b) Đặc điểm của trải phổ
10
Điều chế trải phổ có nhiều tính năng quan trọng như sau:
• Chống lại các nhiễu cố ý hay vô tình.
• Có khả năng loại trừ ảnh hưởng của truyền sóng nhiễu tia.
• Có khả năng dùng chung băng tần với người sử dụng khác.
• Sử dụng được cho thông tin vệ tinh ở chế độ CDMA.
• Đảm bảo tính riêng tư nhờ sử dụng các mã trải phổ giả ngẫu nhiên.
• Được phép hoạt động không cần giấy phép ở ba lĩnh vực là: công
nghiệp, khoa học, y tế, với công suất đến 1W ở các băng tần: 902-
928 MHz, 2.4 – 2.4835GHz, 5.725-5.85 GHz.
2.4. Chuỗi giả ngẫu nhiên (PN – Pseudo Noise)
Các tín hiệu trải phổ băng thông rộng tựa tạp âm được tao ra bằng các
chuỗi giả ngẫu nhiên. Các chuỗi này phải được tạo ra theo một quy luật xác định,
nhưng ngẫu nhiên trước các quan sát bình thường.
Chuỗi m có độ dài cực đại 2
m
được xem là chuỗi giả ngẫu nhiên quan
trọng nhất được tạo thành thông qua ghi dịch nối tiếp và các cổng XOR. Chuỗi này
được xác định bằng một đa thức tạo mã tuyến tính g(x) bậc m(m>0).
g(x) = g
m
x
m
+ g
m-1
x
m-1
+ g
m-2

x
m-2
+ … + g
1
x + g
0
(1)
Trong đó g
i
có giá trị là 0 hoặc 1 và g
m
= g
0
= 1
Cho g(x) = 0. Ta có sự hồi quy như sau :
1 = g
1
x + g
2
x
2
+ … + g
m-1
x
m-1

+ g
m
x
m

(2)
Với x
k
thể hiện đơn vị trễ. Nếu g
i
= 1, khóa tương ứng là mạch đóng,
ngược lại khóa tương ứng là mạch mở. Thanh ghi dịch là một mạch cơ số có 2 trạng
thái với m phần tử nhớ. Vì thế số trạng thái khcs 0 cực đại là 2
m
– 1
11
Giả sử s
i
(j) biểu diễn giá trị phần tử thứ j trong thanh ghi dịch ở xung
đồng hồ i là vector có độ dài hữu hạn s
i
= [ s
i
(1), s
i
(2), … , s
i
(m)]. Đầu ra ở nhịp xung
thứ i là c
i-m
= s
i
(m). Thay vào (2), ta có :
c
i

= g
1
c
i-1
+ g
2
c
i-2
+ … + g
m-1
c
i-(m-1)
+ g
m
c
i-m
(3)
c
i+m
= g
1
c
i+m-1
+ g
2
c
i+m-2
+ … + g
m-1
c

i+1
+ c
i
(mod 2) (4)
(5)
2.5. Mô hình giả lập hệ thính giác
Mô hình giả lập hệ thính giác là một thuất toán cố gắng mô phỏng lại cơ
chế cảm nhận âm thanh của tai người. Nó sử dụng các kiến thức tổng hợp từ nhiều
ngành, đặc biệt là hai ngành : sinh lý học và thính âm học.
Trong quá trình xử lý, một cơ chế rất quan trọng được dùng là “ngụy
trang tần số đồng bộ”. Mô hình thính giác xử lý tín hiệu âm thanh để tạo ra ngưỡng
ngụy trang sau cùng. Thông tin này dùng để “làm trơn” tín hiệu âm thanh đã được ký
số để tai người không cảm nhận được. Để giảm thời gian xử lý, ta chia tín hiệu thành
nhiều đoạn nhỏ liên tiếp, chồng lấp một phần lên nhau, mỗi đoạn nhỏ này được gọi
là một frame.
s(t): tín hiệu âm thanh trên miền thời gian.
Đầu tiên, tín hiệu âm thanh được chuyển từ miền thời gian sang miền tần số
thông qua phép biến đổi Fourier. Từng đại lượng trong mô hình được xác định như
sau:
s(jw) = FFT (s(t))
S
p
(jw) = Re{Sw(jw)}
2
+ Im{Sw(jw)}
2
= {Sw(jw)}
2
12
Spz được biểu diễn bằng đơn vị Bark. Công thức chuyển đổi từ đơn vị Hz

sang Bark như sau:
HBZ và LBZ là các tần số trên và tần số dưới của critical band z.
Sm(z) = Spz(z) * B(z)
T(z) là ngưỡng nghe sau cùng, được tính bằng công thức:
T(z) = max (Tnorm(z), TH)
TH: (ngưỡng nghe) là giá trị nhỏ nhất có thể nghe được và được tính theo
công thức
TH = max([Ppt(jw)])
Trong đó Ppt(jw) là công suất của tín hiệu thăm dò p(t):
p(t) = sin(2∏sin 4000r)
Tnorm(z) là ngưỡng nghe sau khi chuẩn hóa ngưỡng nghe thô. Và được tính
như sau:
Với Traw(z) là ngưỡng năng lượng thô:
Trong đó O(z) = α(14.5 + z) + (1 – α)5.5
13
III. Đại diện tài liệu và Hàm băm
3.1. Vấn đề đại diện tài liệu và hàm băm
a) Một số vấn đề với “chữ ký số”
* Vấn đề 1:
“Ký số” thực hiện trên từng bit tài liệu, nên độ dài của “chữ ký số” ít nhất
cũng bằng độ dài của tài liệu. Một số chữ ký trên bản tin có kích thước gấp đôi bản
tin gốc. Ví dụ khi dùng sơ đồ chữ ký DSS để ký vào bản tin có kích thước 160 bit,
thì chữ ký số này sẽ có kích thước 320 bit.
Trong khi đó trên thực tế, ta cần phải ký vào các bản tin có kích thước rất lớn,
ví dụ vài chục MegaByte (tương ứng hàng ngàn trang tin trên giấy). Như vậy phải
tốn nhiều bộ nhớ để lưu trữ “chữ ký”, mặt khác tốn nhiều thời gian để truyền “chữ
ký” trên mạng…
* Vấn đề 2:
Với một số sơ đồ chữ ký “an toàn”, thì tốc độ ký lại chậm vì chúng dùng nhiều
phép tính số học phức tạp như số mũ modulo.

* Vấn đề 3:
Thực tế có thể xảy ra trường hợp: với nhiều bản tin đầu vào khác nhau, sử
dụng hệ mã hóa hay sở đồ ký số giống nhau (có thể khác nhau), nhưng lại cho ra bản
mã hay chữ ký giống nhau (đó là ánh xạ nhiều – một), như hình dưới. Điều này sẽ
dẫn đến phức tạp cho việc xác thực thông tin.
b) Giải quyết các vấn đề trên
* Cách 1:
Một cách đơn giản để giải quyết các vấn đề trên với thông điệp có kích thước
lớn là “chặt” bản tin thành nhiều đoạn nhỏ (Ví dụ 160 bit), sau đó ký lên các đoạn đó
độc lập nhau. Nhưng biện pháp này gặp các vấn đề trên.
14
Hơn thế nữa còn gặp vấn đề nghiêm trọng hơn. Đó là kết quả sau khi ký, nội
dung của thông điệp có thể bị xáo trộn các đoạn với nhau, hoặc một số đoạn trong
chúng có thể bị mất mát. Ta cần phải bảo vệ tính toàn vẹn của bản tin gốc.
* Cách 2:
Thay vì phải ký trên tài liệu dài, người ta thường dùng “hàm băm” để tạo “đại
diên” cho tài liệu, sao đó mới “ký số” lên “đại diện” này.
Các tài liệu (bản tin) có thể dưới dạng văn bản, hình ảnh, âm thanh, … và kích
thước của chúng tùy ý (vài KB đến vài chục MB), qua các thuật toán băm: như MD4,
MD5, SHA, các “đại diện” tương ứng của chúng có kích thước cố định, ví dụ 128
bit với dòng MD, 160 bit với dòng SHA.
“Đại diện” của tài liệu chính là giá trị của “hàm băm” trên tài liệu, nó còn
được gọi là “tóm lược” hay “bản thu gọn” của tài liệu.
Với mỗi tài liệu (đầu vào), qua “hàm băm” chỉ có thể tính ra được một “đại
diện” – giá trị băm tương ứng – duy nhất. “Đại diện” của tài liệu được xem là “đặc
thù” của tài liệu (thông điệp), giống như dấu vân tay của mỗi người.
Trên thực tế, hai tài liệu khác nhau có hai “đại diện” khác nhau. Như vậy khi
đã có “đại diện” duy nhất cho một tài liệu, thì việc “ký” vào tài liệu, được thay bằng
“ký” vào “đại diện” của nó là hoàn toàn hợp lý. Đó là chưa kể việc tiết kiệm bao
nhiêu thời gian cho việc “ký số”, bộ nhớ lưu giữ “chữ ký”, thời gian truyền “chữ ký”

trên mạng,…
Cơ chế gửi tài liệu cùng “chữ ký” trên nó sử dụng hàm băm được mô tả theo
các hình sau.
15
3.2. Tổng quan về Hàm băm
a) Hàm băm (Hàm tạo đại diện tài liệu)
* Khái niệm Hàm băm
Hàm băm là thuật toán không dùng khóa để mã hóa (ở đây dùng thuật ngữ
“băm” thay cho “mã hóa”), nó có nhiệm vụ “lọc” (băm) tài liệu (bản tin) và cho kết
quả là một giá trị “băm” có kích thước cố định, còn gọi là “đại diện tài liệu” hay
“đại diện bản tin”, “đại diện thông điệp”.
Hàm băm là hàm một chiều, theo nghĩa giá trị của hàm băm là duy nhất, và từ
giá trị băm này, “khó thể” suy ngược lại được nội dung hay độ dài ban đầu của tài
liệu gốc.
* Đặc tính của Hàm băm
Hàm băm h là hàm một chiều (One-way Hash) với các đặc tính sau:
+ Với tài liệu đầu vào (bản tin gốc) x, chỉ thu được giá trị băm duy nhất z =
h(x).
16
+ Nếu dữ liệu trong bản tin x bị thay đổi hay bị xóa để thành bản tin x’, thì giá
trị băm h(x’) ≠ h(x).
Cho dù chỉ là một sự thay đổi nhỏ, ví dụ chỉ thay đổi 1 bit dữ liệu của bản tin
gốc x, thì giá trị băm h(x) của nó cũng vẫn thay đổi. Điều này có nghĩa là: hai thông
điệp khác nhau, thì giá trị băm của chúng cũng khác nhau.
+ Nội dung của bản tin gốc “khó” thể suy ra từ giá trị băm của nó. Nghĩa là:
với thông điệp x thì “dễ” tĩnh được z = h(x), nhưng lại “khó” tính ngược lại được x
nếu chỉ biết giá trị băm h(x) (Kể cả khi biết hàm băm h)
* Ứng dụng của hàm băm
+ Với bản tin dài x, thi chữ ký trên x cũng sẽ dài, như vậy tốn thời gian “ký”,
tốn bộ nhớ lưu giữ “chữ ký”, tốn thời gian truyền “chữ ký” trên mạng.

Người ta dùng hàm băm h để tạo đại diện bản tin z = h(x), nó có độ dài ngắn
(ví dụ 128 bit). Sau đó ký trên z, như vậy chữ ký trên z sẽ nhỏ hơn rất nhiều so với
chữ ký trên bản tin gốc x.
+ Hàm băm dùng để xác định tính toàn vẹn dữ liệu/
+ Hàm băm dùng để bảo mật một số dữ liệu đặc biệt, ví dụ bảo vệ mật khẩu,
bảo vệ khóa mật mã, …
b) Các tính chất của Hàm băm
* Tính chất 1: Hàm băm h là không va chạm yếu.
- Kiểu tấn công theo tính chất 1:
+ Người A gửi cho B bản tin (x, y) với y = sig
k
(h(x)). B không nhận
được (x, y) vì trên đường truyền, tin bị lấy trộm. Tên trộm bằng cách nào đó tìm
được một bản tin x’ ≠ x nhưng lại có h(x’) = h(x). Hắn thay thế x bằng x’, và chuyển
tiếp (x’, y) đến cho B. Người B nhận được (x’, y), và vẫn xác thực được thông tin
đúng đắn. Do đó, để tránh kiểu tấn công như trên, hàm h phải thỏa mãn tính chất:
không va chạm yếu.
- Khái niệm: Hàm băm không va chạm yếu.
Hàm băm h được gọi là không va chạm yếu, nếu cho trước bức điện x, “khó”
thể tính toán để tìm ra bức điện x’ ≠ x mà h(x’) = h(x).
* Tính chất 2: Hàm băm h là không va chạm mạnh.
17
- Khái niệm: Hàm băm h được gọi là không va chạm mạnh nếu “khó” thể
tính toán để tìm ra hai bức thông điệp khác nhau x’ và x (x’ ≠ x) mà có h(x’) = h(x).
* Tính chất 3: Hàm băm h là hàm một chiều.
- Khái niệm: Hàm băm h được gọi là hàm một chiều nếu khi cho trước một
bản tóm lược thông báo z thì “khó thể” tính toán để tìm ra thông điệp ban đầu x sao
cho h(x) = z.
c) Các loại Hàm băm
Các hàm băm dòng MD (MD2, MD4, MD5) do Rivest đề xuất. Giá trị băm

theo các thuật toán này có độ dài cố định là 128 bit. Hàm băm MD4 đưa ra vào năm
1990. Một năm sau phiên bản mạnh hơn là MD5 cũng được đề xuất.
Hàm băm an toàn SHA, phức tạp hơn nhiều, cũng dưa trên các phương pháp
tương tự, được công bố trong Hồ sơ liên bang năm 1992 và được chấp nhận làm tiêu
chuẩn vào năm 1993 do Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST). Giá trị
băm theo thuật toán này có độ dài cố định là 160 bit.
IV. Chữ ký số
4.1. Khái niệm “chữ ký số”
a) Giới thiệu “chữ ký số”
Để chứng thực nguồn gốc hay hiệu lực của một tài liệu (ví dụ: đơn xin học,
giấy báo nhập học, hợp đồng mua bán,…), từ xưa đến nay người ta dùng chữ ký
“tay”, ghi vào phía dưới của mỗi tài liều. Như vậy người ký phải trực tiếp “ký tay”
vào tài liệu.
Ngày nay các tài liệu được số hóa, người ta cũng có nhu cầu chứng thực
nguồn gốc hay hiệu lực của các tài liệu này. Rõ ràng không thể “ký tay” vào tài liệu
số, vì chúng không được in ấn trên giấy. Tài liệu “số” (hay tài liệu “điện tử”) là một
xâu các bít (0 hay 1), xâu bít có thể rất dài (nếu in trên giấy có thể hàng nghìn trang).
“Chữ ký” để chứng thực một xâu bít tài liệu cũng không thể là một xâu bít nhỏ đặt
phía dưới xâu bít tài liệu. Một “chữ ký” như vậy chắc chắn sẽ bị kẻ gian sao chép để
đặt dưới một tài liệu khác bất hợp pháp.
18
Những năm 80 của thế kỷ 20, các nhà khoa học đã phát minh ra”chữ ký số” để
chứng thực một “tài liệu số”. Đó chính là “bản mã” của xâu bít tài liệu.
Người ta tạo ra “chữ ký số” (chữ ký điện tử) trên “tài liệu số” giống như tạo ra
“bản mã” của tài liệu với “khóa lập mã”.
Như vậy “ký số” trên “tài liệu số” là “ký” trên từng bít tài liệu. Kẻ gian khó
thể giả mạo “chữ ký số” nếu không biết “khóa lập mã”.
Để kiểm tra một “chữ ký số” thuộc về một “tài liệu số”, người ta giải mã “chữ
ký số” bằng “khóa giải mã”, và so sánh với tài liệu gốc.
Ngoài ý nghĩa để chứng thực nguồn gốc hay hiệu lực của các tài liệu số hóa.

Mặt mạnh của “chữ ký số” hơn “chữ ký tay” là ở chỗ người ta có thể “ký” vào tài
liệu từ rất xa trên mạng công khai. Hơn thế nữa, có thể “ký” bằng các thiết bị cầm
tay (ví dụ điện thoại di động) tại khắp mọi nơi (Ubikytous) và di động (Mobile),
miễn là kết nối được vào mạng. Đỡ tổn hao thời gian, sức lực và chi phí…
“Ký số” thực hiện trên từng bít tài liệu, nên độ dài của “chữ ký số” ít nhất
cũng bằng độ dài tài liệu. Do đó thay vì ký trên tài liệu dài, người ta thường dùng
“hàm băm” để tạo “đại diện” cho tài liệu, sau đó mới “ký số” lên “đại diện” này.
b) Sơ đồ “chữ ký số”
Sơ đồ chữ ký là bộ 5 (P, A, K, S, V), trong đó:
P là tập hữu hạn các văn bản có thể.
A là tập hữu hạn các chữ ký có thể.
K là tập hữu hạn các khóa có thể.
S là tập các thuật toán ký.
V là tập các thuật toán kiểm thử.
Với mỗi khóa k thuộc K, có thuật toán ký Sig
k
thuộc S, Sig
k
: P -> A, có thuật
toán kiểm tra chữ ký Ver
k
thuộc V, Ver
k
: P x A -> {đúng, sai}, thỏa mãn điều kiện
sau với mọi x thuộc P, y thuộc A:
Đúng, nếu y = Sig
k
(x)
Ver
k

(x,y) =
Sai, nếu y ≠ Sig
k
(x)
Chú ý:
19
Người ta thường dùng hệ mã hóa công khai để lập “Sơ đồ chữ ký số”. Ở đây
khóa bí mật a dùng làm khóa “ký”, khóa công khai b dùng làm khóa kiểm tra “chữ
ký”.
Ngước lại với việc mã hóa, dùng khóa công khai b để lập mã, dùng khóa bí
mật a để giải mã.
Điều này là hoàn toàn tự nhiên, vì “ký” cần giữ bí mật nên phải dùng khóa bí
mật a để “ký”. Còn “chữ ký” là công khai cho mọi người biết, nên họ dùng khóa
công khai b để kiểm tra.
4.2. Phân loại chữ ký số
a) Phân loại chữ ký theo đặc trưng kiểm tra chữ ký
* Chữ ký có thể khôi phục thông điệp
Là loại chữ ký, người nhận có thể khôi phục lại được thông điệp đã được “ký”
bởi “chữ ký này”.
Ví dụ: Chữ ký RSA là chữ ký có thể khôi phục thông điệp.
* Chữ ký không thể khôi phục thông điệp
Là loại chữ ký, người nhận không thể khôi phục được thông điệp gốc.
Ví dụ: Chữ ký Elgamal là chữ ký không khôi phục được thông điệp gốc.
b) Phân loại chữ ký theo mức an toàn
* Chữ ký “không thể phủ nhận”
Nhằm tránh việc nhân bản chữ ký để sử dụng nhiều lần, tốt nhất là người gửi
tham gia trực tiếp vào việc kiểm thử chữ ký. Điều đó được thực hiện bằng một giao
thức kiểm thử, dưới dạng một giao thức mời hỏi và trả lời.
Ví dụ: Chữ ký không phủ định (Chaum – van Antverpen)
* Chữ ký “một lần”

Để đảm bảo an toàn, “khóa ký” chỉ dùng 1 lần (one-time) trên 1 tài liệu.
Ví dụ: Chữ ký một lần Lamport.
c) Phân loại chữ ký theo ứng dụng đặc trưng
Chữ ký “mù” (Blind Signature)
Chữ ký “nhóm” (Group Signature)
20
Chữ ký “bội” (Multy Signature)
Chữ ký “mù nhóm” (Blind Group Signature)
Chữ ký “mù bội” (Blind Multy Signature)
4.3. Một số loại chữ ký số
a) Chữ ký RSA
* Sơ đồ
- Tạo cặp khóa (bí mật, công khai) – a,b
Chọn bí mật số nguyên tố lớn p, q, tính n = p * q, công khai n, đặt P = C = Z
n
Tính bí mật ϕ(n) = (p-1).(q-1). Chọn khóa công khai b < ϕ(n), nguyên tố cùng
nhau với ϕ(n)
Khóa bí mật a là phần tử nghịch đảo của b theo mod ϕ(n)
a*b ≡ 1 (mod ϕ(n)).
- Ký số: Chữ ký trên x thuộc P là y = Sig
k
(x) = x
a

(mod n), y thuộc A
- Kiểm tra chữ ký: Ver
k
(x,y) = đúng  x ≡ y
b


(mod n).
* Chú ý
- Giữa sơ đồ chữ ký RSA và sở đồ mã hóa RSA ta thấy có sự tương ứng.
- Việc ký chẳng qua là mã hóa, việc kiểm thử lại chính là việc giải mã.
- Việc “ký số” vào x tương ứng với việc “mã hóa” tài liệu x.
- Kiểm thử chữ ký chính là việc giải mã “chữ ký”, để kiểm tra xem tài liệu đã
giải mã có đúng là tài liệu trước khi ký không. Thuật toán và khóa kiểm thử “chữ ký”
là công khai, ai cũng có thể kiểm thử chữ ký được.
- Chữ ký RSA thuộc loại chữ ký khôi phục thông điệp
b) Chữ ký Elgamal
* Sơ đồ
- Tạo cặp khóa (bí mật, công khai) – a,b
Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong Z
P
là “khó” giải.
Chọn phần tử nguyên thủy g Є Z
*
P
. Đặt P = Z
*
P
, A = Z
*
P
– Z
P-1
.
Chọn khóa bí mật a Є Z
*
P

. Tính khóa công khai h = g
a

mod p.
21
Định nghĩa tập khóa: K = {(p, g, a, h): h = g
a
mob p}.
Các giá trị p, g, h được công khai, phải giữ bí mật a.
- Ký số
Dùng 2 khóa ký: khóa a và khóa ngẫu nhiên bí mật r Є Z
*
P-1
.
(Vì r Є Z
*
P-1
, nên nguyên tố cùng p-1, do đó tồn tại r
-1
mod (p-1))
Chữ ký trên x Є P là y = Sig
k
(x, r) = (γ, δ), y Є A
Trong đó γ Є Z
*
p
, δ Є Z
p-1
:
γ = g

r

mod p và δ = (x-a*γ)*r
-1
mod (p-1)
- Kiểm tra chữ ký
Ver
k
(x, γ, δ) = đúng  h
γ
* γ
δ
≡ g
x
mod p.
* Chú ý
- Nếu chữ ký được tính đúng, kiểm thử sẽ thành công vì
h
γ
* γ
δ
≡ g
a
γ
* g
r*
δ
mod p ≡ g
(
a

γ + r*
δ
)
mod p
Do δ = (x – a * γ) * r
-1
mod (p-1) nên (a * γ + r * δ) ≡ x mod (p-1)
- Chữ ký Elgamal thuộc loại chữ ký không thể khôi phục thông điệp.
c) Chữ ký DSS
* Giới thiệu chuẩn chữ ký số DSS
Chuẩn chữ ký số (DSS: Digital Signature Standard) được đề xuất năm 1991, là
cải biên của sơ đồ chữ ký Elgamal, và được chấp nhận là chuẩn vào năm 1994 để
dùng trong một số lĩnh vực giao dịch ở Mỹ.
Thông thường tài liệu số được mã hóa và giải mã 1 lần. Nhưng chữ ký lại liên
quan đến pháp luật, chữ ký có thể phải kiểm thử sau nhiều năm đã ký. Do đó chữ
ký phải được bảo vệ cẩn thận. Như vậy số nguyên tố p phải đủ lớn (chẳng hạn dài
cỡ 512 bit) để đảm bảo an toàn, nhiều người đề nghị nó phải dài 1024 bit. Tuy nhiên,
độ dài chữ ký theo sơ đồ Elgamal là gấp đôi số bit của p, do đó nếu p dài 512 bit thì
độ dài chữ ký là 1024 bit.
22
Trong ứng dụng dùng thẻ thông minh (Smart card) lại mong muốn có chữ ký
ngắn, nên giải pháp sửa đổi là một mặt dùng p với độ dài từ 512 bit đến 1024 bit (bội
của 64), mặt khác trong chữ ký (γ, δ), các số γ, δ có độ dài biểu diễn ngắn. Ví dụ
160 bit, khi đó chữ ký là 320 bit.
Điều này được thực hiện bằng cách dùng nhóm con cyclic Z
*
q
của Z
*
p

thay cho
Z
*
p
, do đó mọi tính toán được thực hiện trong Z
*
p
, nhưng thành phần chữ ký lại thuộc
Z
*
q
.
Thay đổi công thức tính δ trong sơ đồ chữ ký Elgamal thành
δ = (x + α * γ)r
-1
mod q.
Điều kiện kiểm thử là h
γ
γ
δ
≡ g
x
mod p được sửa thành
α
x*
δ
-1
* β
γ
*

δ
-1

≡ γ (mod p).
Nếu (x + g * γ, p-1) = 1 thì δ
-1
mod p tồn tại.
* Sơ đồ chữ ký DSS
- Tạo cặp khóa (bí mật, công khai) – a,b
Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong Z
P
kà “khó” giải.
Chọn q là ước nguyên tố của p-1. Tức là p-1. Tức là p-1 = t * q hay p = t * q + 1. (Số
nguyên tố p cỡ 512 bit, q cỡ 160 bit).
Chọn g Є Z
*
P
là căn bậc q của 1 mod p, (g là phần tử sinh của Z
*
P
).
Tính α = g
t
, chọn khóa bí mật a Є Z
*
P
, tính khóa công khai h = α
α
mod p.
Đặt P = Z

*
q
, A = Z
*
q
x Z
*
q
, K= {(p, q, α , a, h)/ a Є Z
*
P
, h ≡ α
α
mod p}.
Với mỗi khóa (p, q, α , a, h), k’ = a bí mật, k’’ = (p, q, α , h) công khai.
- Ký số
Dùng 2 khóa ký: khóa a và khóa ngẫu nhiên bí mật r Є Z
*
q
.
Chữ ký trên x Є Z
*
P
là Sig
k’
(x,r) = (γ, δ), trong đó
γ = (α
r
mod p) mod q, δ = (x + a * γ) * r
-1


mod q.
(Chú ý r Є Z
*
q
, để bảo đảm tồn tại r
-1

mod q).
- Kiểm tra chữ ký
23
Với e
1
= x * δ
-1
mod q, e
2
= γ * δ
-1
mod q.
Ver
k’’
(x, γ, δ) = đúng  (α
e1
* h
e2
mod p) mod q = γ
4.4 Ứng dụng của chữ ký số trên âm thanh số
- Bảo vệ bản quyền tập tin âm thanh.
- Xác định được nguồn gốc của tập tin âm thanh.

V. MÃ NGUỒN CHƯƠNG TRÌNH KÝ SỐ TRÊN FILE ÂM THANH
5.1. Xây dựng lớp BigInteger
- Phương thức tính modulo (gcd(this, bi))
public BigInteger gcd(BigInteger bi)
{
BigInteger x;
BigInteger y;
if ((data[maxLength – 1] & 0x80000000) != 0) //negative
x= - this;
else
x = this;
if ((bi.data[maxLength – 1] & 0x80000000) != 0) // negative
y = - bi;
24
else
y = bi;
BigInteger g=y;
while (x.dataLength >1 || (x.dataLength == 1 && x.data[0] != 0 ))
{
g = x;
x = y % x;
y = g;
}
return g;
}
- Phương thức sinh số nguyên tố ngẫu nhiên có kích thước n (bit)
public static BigInteger genPseudoPrime(int bits, int confidence, Random rand)
{
BigInteger result = new BigInteger();
bool done = false;

While (!done)
{
result.genRandomBits(bits, rand);
result.data[0] |= 0x01;
done = result.isProbablePrime(confidence);
}
return result;
}
25

×