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

Một vài ứng dụng của otomat trong mã hoá và nén dữ liệu

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.36 MB, 102 trang )

...

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
---------------------------------------

BÙI MINH TUỆ

MỘT VÀI ỨNG DỤNG CỦA OTOMAT
TRONG MÃ HÓA VÀ NÉN DỮ LIỆU

LUẬN VĂN THẠC SĨ KHOA HỌC
ĐẢM BẢO TỐN HỌC CHO MÁY TÍNH VÀ CÁC HỆ THỐNG TÍNH TỐN

Thầy hướng dẫn: PGS. TS. PHAN TRUNG HUY

Hà Nội – Năm 2010


1

MỤC LỤC
MỞ ĐẦU ....................................................................................................... 3
CHƯƠNG I: TỔNG QUAN VỀ MÃ HÓA VÀ NÉN DỮ LIỆU.................... 5
1.1 Khái niệm về mật mã ............................................................................ 5
1.2 Một số hệ thống mã hoá kinh điển ........................................................ 7
1.2.1 Mã chuyển dịch (Shift Cipher)........................................................ 7
1.2.2 Hệ mã tuyến tính (Affine Cipher) ................................................... 8
1.2.3 Hệ mã Vigenere ............................................................................ 11
1.2.4 Hệ mã Hill .................................................................................... 12
1.3 Mã hóa khóa công khai ....................................................................... 14


1.4 Nguyên tắc của nén dữ liệu ................................................................. 20
1.5 Nén dữ liệu = Mơ hình hóa + Mã hóa ................................................. 21
1.6 Mơ hình hóa nguồn dữ liệu ................................................................. 22
1.6.1 Mơ hình thống kê.......................................................................... 22
1.6.2 Mơ hình từ điển ............................................................................ 23
1.7 Một số phương pháp nén dữ liệu......................................................... 24
1.7.1 Phương pháp mã hóa độ dài loạt (Run Length Coding)................. 24
1.7.2 Phương pháp mã hóa Huffman...................................................... 26
1.7.3 Phương pháp nén LZW ................................................................. 31
CHƯƠNG II: OTOMAT TRONG MÃ HÓA VÀ AN TỒN THƠNG TIN 38
2.1 Văn phạm và sự phân lớp văn phạm.................................................... 38
2.1.1 Định nghĩa văn phạm cấu trúc....................................................... 38
2.1.2 Sự phân cấp Chomsky trên văn phạm ........................................... 39
2.1 Otomat hữu hạn .................................................................................. 42
2.1.1 Otomat hữu hạn đa định - NFA..................................................... 42
2.1.2 Otomat hữu hạn đơn định - DFA................................................... 43
2.1.3 Biểu diễn đại số của otomat .......................................................... 44
2.2 Bài tốn quản lý khóa số ..................................................................... 44
2.2.1 Phát biểu bài tốn.......................................................................... 45
2.2.2 Mơ hình cài đặt ............................................................................. 47
2.3 Otomat như hàm mã hóa ..................................................................... 49
2.3.1 Sơ đồ hoạt động ............................................................................ 49
2.3.2 Thuật toán..................................................................................... 59


2

2.3.3 Đánh giá độ an toàn của phương pháp .......................................... 62
CHƯƠNG III ............................................................................................... 65
ỨNG DỤNG OTOMAT TRỌNG SỐ (WFA) TRONG NÉN ẢNH ............. 65

3.1 Các dạng ảnh.......................................................................................... 65
3.1.1 Ảnh đa phân giải .............................................................................. 68
3.1.2 Ảnh hai cấp đa phân giải .................................................................. 71
3.2 Ngơn ngữ chính qui như các ảnh hai cấp ................................................ 74
3.3 Otomat hữu hạn có trọng số - WFA........................................................ 78
3.4 Vẽ các ảnh WFA .................................................................................... 83
3.5 Thuật toán mã hóa .................................................................................. 85
3.6 Nén ảnh sử dụng WFA ........................................................................... 91
KẾT LUẬN.................................................................................................. 99
TÀI LIỆU THAM KHẢO .......................................................................... 100


3

MỞ ĐẦU
Ngày nay, thơng tin có vai trị và giá trị ngày càng lớn. Công nghệ thông tin
xâm nhập vào hầu hết các hoạt động xã hội. Khi thông tin đóng vai trị ngày
càng quan trọng thì vấn đề bảo mật thông tin, tránh các truy cập bất hợp pháp
trở nên cấp thiết. Một trong những biện pháp hiệu quả để bảo mật thơng tin là
mã hóa. Mã hóa được áp dụng trong rất nhiều hoạt động kinh tế xã hội. Chẳng
hạn, ngân hàng là một trong các lĩnh vực mà các hệ thống mã hóa được áp
dụng rất phổ biến, nhờ mã hóa mới có thể thực hiện các giao dịch trực tuyến
qua mạng một cách an toàn. Lịch sử đã có rất nhiều hệ mã được áp dụng từ
các hệ mã cổ điển như mã tuyến tính đến những hệ mã hiện đại như AES,
RSA …
Cùng với sự phát triển của Internet, nhu cầu truyền dữ liệu qua mạng ngày
một tăng. Nếu như với lượng thông tin nguyên thủy để truyền qua mạng thì sẽ
tốn rất nhiều thời gian và tiền bạc, do đó dữ liệu trước khi truyền cần được
nén. Nén dữ liệu là một biểu hiện hết sức sinh động của ứng dụng lý thuyết
thông tin, khởi đầu với các cơng trình nghiên cứu của Claude Shannon ở

Bellads vào cuối những năm 40. Nó liên quan đến nhiều vấn đề về thông tin,
bao gồm các phương pháp khác nhau dùng để xử lý, lưu trữ và truyền thơng
tin. Thế giới đã có rất nhiều thuật tốn có hiệu quả trong việc nén dữ liệu và
được chia làm hai loại: Nén có mất mát thơng tin (Run-length, Huffman,
LZW, …) và nén không mất mát thông tin (JPEG, MPEG, …). Nén dữ liệu
cũng có thể xem là một dạng mã hóa thơng tin.
Mục đích chính của luận văn tìm hiểu về một số phương pháp mã hóa và nén
dữ liệu, đặc biệt, một số phương pháp mới ứng dụng lý thuyết otomat.
Nguyên lý của otomat được đưa ra từ giữa thế kỷ 20, trong mối liên hệ với
ngôn ngữ hình thức và các hệ thống điều khiển hữu hạn trạng thái. Gần đây,


4

các hình thức otomat nâng cao như otomat xác suất, otomat có trọng số, đã
được nhiều tác giả tập trung nghiên cứu, thu được nhiều kết quả lý thú (xem
[6], [10], [13] …).
Ngoài phần Mở đầu, Kết luận và Tài liệu tham khảo, nội dung chính của luận
văn được trình bày trong ba chương.
 Chương I: “Tổng quan về mã hóa và nén dữ liệu”. Trình bày các
khái niệm cơ sở về mật mã, nén dữ liệu và giới thiệu một số phương
pháp mã hóa, nén dữ liệu đang được áp dụng.
 Chương II: “Otomat trong mã hóa và an tồn thơng tin”. Chương
này dành để trình bày một số khái niệm cơ bản về văn phạm. Đặc biệt,
đưa ra một mơ hình mã hóa mới theo cách tiếp cận otomat hữu hạn
trong mối liên hệ với các cấu trúc đại số.
 Chương III : “Ứng dụng otomat trọng số trong nén ảnh”. Trình bày
một phương pháp nén ảnh sử dụng otomat có trọng số được nghiên cứu
gần đây. Phương pháp này có nhiều khả năng ứng dụng vì chất lượng
và tỷ lệ nén cao, có thể so sánh với các phương pháp truyền thống như

JPEG, Fractal, …


5

CHƯƠNG I
TỔNG QUAN VỀ MÃ HÓA VÀ NÉN DỮ LIỆU

Mục đích chính của chương này là trình bày các khái niệm cơ sở về mật mã,
nén dữ liệu, giới thiệu một số hệ thống mã hóa như mã chuyển dịch, mã tuyến
tính, RSA, … và một số phương pháp nén dữ liệu đang được áp dụng như mã
hóa Huffman, nén LZW, ...
1.1 Khái niệm về mật mã
Từ rất lâu, thông tin đã có vai trị quan trọng trong xã hội. Khi có thơng tin tất
nhiên sẽ có nhu cầu trao đổi thông tin, truyền tin. Và một cách tự nhiên cần có
những cách trao đổi thơng tin an tồn. Ngay từ thời cổ đại, mã hoá đã được
Juilus Caesar áp dụng để trao đổi tin tức quân sự. Một cách ngắn gọn, mục
đích của mã hố là cho phép hai bên A và B có thể giao tiếp an tồn qua các
kênh thông tin không được bảo mật sao cho người thứ ba O khơng biết được
thơng tin gì thực sự được trao đổi. Thông tin ban đầu cần trao đổi gọi là bản
rõ (plain text, trong một số tài liệu gọi là bản hiện). Để trao đổi, A thực hiện
mã hoá bản rõ bằng khoá mã định trước thu được bản mã và gửi bản mã
(cipher text) cho B qua kênh thơng tin. O có thể thu được bản mã gửi đi
nhưng không biết bản rõ A muốn gửi. Cịn B, với khố giải mã, có thể giải mã
bản mã nhận được và thu được bản rõ ban đầu.
Một cách hình thức, có thể định nghĩa hệ mã như sau
Hệ mã (Cryptosystem) là bộ  P, C , K , E , D  thoả mãn các điều kiện sau
(1) P là tập hữu hạn các bản rõ có thể có;
(2) C là tập hữu hạn các bản mã có thể có;
(3) K là khơng gian khố mã, là tập hữu hạn các khố mã có thể có;



6

(4) Với mỗi khố k  K , có một quy tắc mã ek  E và quy tắc giải mã

d k  D. Các hàm ek : P  C và d k : C  P thỏa d k  ek  x    x với
mọi bản rõ x  P.
Ta để ý tính chất cơ bản (4), nó thể hiện rằng mỗi bản rõ x được mã hoá bằng
khoá ek thu được bản mã y và đến lượt bản mã y qua hàm d k giải mã được
bản rõ x ban đầu.
Người thứ ba
O

Người gửi
A

x

Encoder

y

Decoder

x

Người nhận
B


Kênh an tồn
K
Key space

Hình 1.1 Sơ đồ áp dụng hệ mã

Với một hệ mã cụ thể A và B thực hiện giao thức như sau: Đầu tiên, họ chọn
ngẫu nhiên khoá mã k  K , sự lựa chọn này chỉ có A và B được biết cịn O
khơng quan sát được. Bây giờ, giả sử cần trao đổi thông điệp x  x1 x2 ...xn , với
các bản rõ xi  P 1  i  n  . Mỗi bản rõ xi được mã hoá bằng quy tắc ek được
xác định bởi khoá mã K định trước. Từ đó, A tính được

yi  ek  xi  ,1  i  n,


7

và thu được thơng điệp mã hố y  y1 y2 ... yn được gửi đến B qua kênh thông
tin. Khi nhận được bản mã y , B dùng hàm d k giải mã, thu được thông điệp x
ban đầu.
Rõ ràng, các hàm mã hố phải là đơn ánh, vì nếu khơng thì khơng thể giải mã
đúng được. Ví dụ, nếu tồn tại

y1  ek  x1   ek  x2  , x1  x2 ,
thì khi đó B không thể nào xác định được bản mã y1 cần được giải mã là x1
hay x2 . Để ý rằng, nếu P  C thì mọi hàm mã hố đều là một hốn vị trên
một tập thích hợp.
1.2 Một số hệ thống mã hoá kinh điển
1.2.1 Mã chuyển dịch (Shift Cipher)
Hệ mã chuyển dịch là hệ mã xuất hiện sớm nhất, đã được Juilus Caesar áp

dụng từ thời trung cổ để trao đổi thông tin quân sự. Sơ đồ hệ mã chuyển dịch
được mô tả như sau
Cho P  C  K   26 . Với 0  K  25, xác định

ek  x   x  K mod 26;
d k  y   y  K mod 26.
Ta tương ứng mỗi chữ cái với một số nguyên: A  0, B  1, ... Hệ mã
chuyển dịch thực hiện tính tốn trên tập  26 . Ta có bảng ánh xạ như Bảng
1.1.


8

Bảng 1.1: Ánh xạ ký tự

A B C D E F

G H I

J

K L M N O P

0

6

9

10 11 12 13 14 15 16


1

2

3

4

5

7

8

Q

R S T U V W X Y Z
17 18 19 20 21 22 23 24 25

Ví dụ 1.1 Giả sử ta sử dụng khoá K  11 và chuỗi bản rõ là “khoatoan”.
Đầu tiên, dùng Bảng 1.1, ta biến đổi thành chuỗi các số nguyên
10 , 7 , 14 , 0 , 19 , 14 , 0 , 13.
Tiếp theo, ta cộng với 11 và giản ước với mod 26 được
21 , 18 , 25 , 11 , 4 , 25 , 11 , 24.
Cuối cùng, ta chuyển đổi thành ký tự thu được chuỗi bản mã
VSZLEZLY.
Để giải mã, đầu tiên B chuyển đổi chuỗi bản mã sang chuỗi số tự nhiên, sau
đó, trừ mỗi số đi 11 (khoá K ) và giản ước mod 26 và cuối cùng, chuyển đổi
ngược lại thành ký tự, B thu được dịng bản rõ ban đầu.

Để có thể áp dụng trong thực tế, hệ mã hoá cần thoả mãn một số tính chất,
dưới đây là hai trong số đó
(1) Các hàm mã hoá ek và giải mã d k phải là hàm dễ dàng tính tốn;
(2) Người thứ ba nếu biết bản mã y thì phải khơng biết được khoá mã K
đã dùng hoặc bản rõ x ban đầu.
1.2.2 Hệ mã tuyến tính (Affine Cipher)
Trong hệ mã tuyến tính, hàm mã hố là hàm tuyến tính (affine) có dạng

e  x   ax  b mod 26.


9

Để quá trình giải mã là duy nhất, ta cần có hàm mã hố là đơn ánh, tức là với
mọi y , phương trình

ax  b  y mod 26
có nghiệm duy nhất. Dễ thấy rằng, phương trình trên có nghiệm duy nhất khi
và chỉ khi a và 26 là nguyên tố cùng nhau, nghĩa là gcd  a,26   1, với gcd là
hàm tính ước chung lớn nhất (UCLN).
Một cách tổng qt ta có
Định lý 1.1 Phương trình đồng dư ax  b  mod n  có nghiệm duy nhất

x  x0 mod n với mọi b   khi và chỉ khi gcd  a, n   1.
Vì 26 = 2  13 nên ta có các giá trị có thể của a là tập
{1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25}.
Với các giá trị của b bất kỳ trong  26 , ta có hệ mã tuyến tính có thể có 2612
= 312 khố khác nhau.
Theo lý thuyết số, số các số nguyên k ,0  k  m , nguyên tố cùng nhau với m
thường được ký hiệu là   m  (còn gọi là hàm Euler). Nếu m có phân tích ra

thừa số
n

m   piei
i 1

thì giá trị hàm   m  được cho bởi
n

  m     piei  piei 1 .
i 1

Từ đó, ta có số lượng khố có thể có, nghĩa là số cặp  a, b  , gcd  a, m   1,
với 0  a, b  m  1, của hệ mã tuyến tính trong  m là m  m  .


10

Ta chuyển sang thao tác giải mã trong mod 26. Giả sử gcd  a,26   1. Để giải
mã, ta cần giải phương trình y  ax  b  mod 26  . Với khái niệm nghịch đảo
(multiplicative inverse), ta có thể tìm được nghiệm phương trình.
Cho a   m . Khi đó, nghịch đảo của a là phần tử a 1   m thoả aa 1  1 ,
dưới dạng đồng dư thức aa 1  a 1a  1 mod m  .
Điều kiện cần và đủ để tồn tại phần tử nghịch đảo a 1 là gcd  a, m   1 và khi
đó a 1 là duy nhất. Hơn nữa, nếu b  a 1 thì a  b 1. Nếu p là nguyên tố thì
mọi phần tử khác 0 của  p đều có phần tử nghịch đảo. Từ hệ thức

ax   y  b  mod 26
nhân hai vế với a 1 và để ý a 1a  1mod 26, ta có hàm giải mã


d k  a 1  y  b  mod 26  .
Hệ mã tuyến tính được mơ tả như sau
Cho P  C   26 và K   a , b   26  26 : gcd  a ,26   1. Xác định

ek  x   ax  b mod 26;
d k  y   a 1  y  b  mod 26, với x, y   26 .
Ví dụ 1.2 Giả sử K   7,3 , ta có 71 mod 26 = 15, hàm mã hoá là

ek  x   7 x  3
và hàm giải mã tương ứng là

d k  y   15  y  3  15 y  19mod 26.
Ta có thể kiểm tra lại rằng d k  ek  x    x với mọi x   26 . Thực vậy,


11

d k  ek  x    dk  7 x  3
 15  7 x  3  19  x  mod 26  .
1.2.3 Hệ mã Vigenere
Trong hệ mã chuyển dịch cũng như mã thay thế, khi đã chọn khố K thì mỗi
ký tự ánh xạ đến chỉ một ký tự khác. Do đó, người ta gọi các hệ mã đó là đơn
ký tự (monoalphabetic). Ngồi các hệ mã đơn ký tự, cịn có các hệ mã đa ký
tự (polyalphabetic), ta sẽ xem xét một hệ mã cổ điển là hệ Vigenere, lấy theo
tên của Blaise de Vigenere. Vẫn áp dụng các ánh xạ như cũ A  0, ... ta có
thể gắn mỗi khoá K với chuỗi ký tự độ dài m gọi là từ khoá. Hệ mã Vigenere
mã hoá theo từng khối m ký tự hiện.
Ví dụ 1.3 Giả sử m  6 và từ khoá là CIPHER, tương đương với biểu diễn
chuỗi số nguyên K   2,8,15,7,4,17  . Giả sử cần mã hoá chuỗi hiện
khoatoanbkhn

Đầu tiên, ta biến đổi thành chuỗi các số nguyên tương ứng, nhóm từng bộ 6
số lại được
(10, 7, 14, 0, 19, 14), (0, 13, 1, 10, 7, 13),
rồi cộng với từ khoá theo mod 26 như sau
(12, 15, 3, 7, 23, 5), (12, 15, 3, 7, 23, 5).
Cuối cùng, ta biến đổi chuỗi các số nguyên thành ký tự, thu được chuỗi bản

MPDHXFCVQRLE.
Để giải mã, ta dùng cùng từ khoá, nhưng ta thực hiện phép trừ thay vì phép
cộng.


12

Có thể thấy rằng, số từ khố với độ dài m có thể có 26m khả năng khác nhau,
như thế với giá trị m không lớn, việc thử và sai tồn bộ các khả năng cũng
địi hỏi nhiều thời gian. Ví dụ, nếu ta lấy m  6 thì khơng gian từ khoá vượt
quá 28  107 , con số này cũng đủ lớn để không thể thực hiện bằng tính tốn
thủ cơng.
Trong hệ mã Vigenere với từ khố độ dài m, một ký tự có thể được ánh xạ
với một trong số m ký tự có thể (giả sử rằng từ khố có m ký tự khác nhau).
Hệ mã có tính chất đó gọi là hệ mã đa ký tự (polyalphabetic). Nói chung, phá
khố hệ mã đa ký tự khó khăn hơn trường hợp hệ mã đơn ký tự.
1.2.4 Hệ mã Hill
Ta xem xét hệ mã đa ký tự khác, đó là hệ mã Hill. Hệ mã này được Lester
m

S.Hill đưa ra năm 1929. Giả sử m là số nguyên dương, đặt P  C    26  .
Tư tưởng của Hill là sử dụng m tổ hợp tuyến tính của m ký tự trong một
phần tử bản rõ, từ đó sinh ra m ký tự trong một phần tử bản mã.

Ví dụ 1.4 Giả sử m  2, ta có thể viết phần tử bản rõ dưới dạng x   x1 , x2  và
phần tử bản mã y   y1 , y2  , trong đó y1 và y2 là tổ hợp tuyến tính của x1 và

x2 . Chẳng hạn, có thể lấy
y1  11x1  3 x2 ;
y2  8 x1  7 x2 .
Ta có thể viết dưới dạng ma trận

 11 8 
.
 3 7

 y1, y2    x1, x2  

Tổng quát, ta có thể chọn ma trận K m,m như là khoá, K   ki , j  .
Với x   x1 ,..., xm   P và K  K , ta tính được y  ek  x    y1 ,..., ym  như sau


13

 k11k12 ...k1m 

...
 y1,..., ym    x1,..., xm  

 k k ...k 
 m1 m 2 mm 
hay viết ngắn gọn y  xK .
Ta nói rằng, bản mã thu được từ bản rõ bằng biến đổi tuyến tính. Ta cịn phải
mơ tả q trình giải mã, tức là cách tính x từ y. Dễ thấy rằng, quá trình giải

mã cần đến ma trận nghịch đảo của K . Từ công thức y  xK , nhân hai vế với
ma trận nghịch đảo ta được

yK 1   xK  K 1  x  KK 1   xI  x.
Do đó, bản rõ x nhận được từ cơng thức

x  yK 1.
Ví dụ 1.4 (tiếp) Với ma trận khố mã như trên ta có ma trận nghịch đảo là

 7 18 

K 1  
23
11


Giả sử, ta cần mã hoá từ july.
Ta chia thành 2 khối ju = (9, 20) và ly = (11, 24). Nhân với ma trận khoá

11 8 
11 8 
 = (11, 22).
 = (3, 4) và (11, 24) 
(9, 20) 
3
7
3
7





Từ đó, ta có bản mã là DELW. Để giải mã, ta dùng ma trận nghịch đảo.

 7 18 
7 18 
 = (9, 20) và (11, 22) 
 = (11, 24).
(3, 4) 
23
11
 23 11




14

1.3 Mã hóa khóa cơng khai
Trong các hệ mã hố ban đầu, khi hai bên A và B muốn trao đổi thơng tin, họ
chọn một khố bí mật K, từ đó có hàm mã hóa ek và hàm giải mã d k . Với các
hệ ta đã xem xét đến nay, hàm giải mã d k nói chung trùng với hàm mã hố ek
(hoặc dễ dàng có được từ ek ). Hệ mã hoá như thế gọi là hệ mã với khố bí
mật hoặc đối xứng. Nếu hàm ek bị tìm ra thì hệ mã khơng cịn bảo mật nữa vì
có thể dễ dàng tính d k .
Một nhược điểm của hệ mã dùng khố bí mật là trước khi trao đổi thơng tin
cần trao đổi khố mã. Vấn đề này chưa bao giờ được xem là dễ thực hiện, và
nó nhanh chóng trở nên một việc gần như khơng thể quản lý được khi số
lượng người tham gia tăng lên, hay khi người ta khơng cịn các kênh an tồn
để trao đổi khóa nữa, hoặc lúc họ phải liên tục thay đổi các chìa khóa - một

thói quen nên thực hiện trong khi làm việc với mật mã.
Để khắc phục nhược điểm đó, ý tưởng dùng hệ mã khố cơng khai xuất hiện,
trong đó, hàm giải mã d k rất khó tìm được dù đã biết hàm mã hố ek . Như
vậy, ta có thể cơng bố hàm ek , và hệ mã như thế được gọi là hệ mã khố cơng
khai. Ưu điểm của hệ mã khố cơng khai là bên A có thể gửi thơng điệp được
mã hố cho B dùng hàm mã hố được cơng khai của B (mà khơng cần trao
đổi khố trước). Chỉ có B biết hàm giải mã d k mới giải mã được thơng điệp.
Mã khóa sử dụng khóa cơng khai (cịn gọi là mã hóa bất đối xứng) liên quan
đến cặp khóa - một khóa bí mật và một khóa cơng khai - giao tiếp với một
thực thể cần xác thực nhận dạng hoặc để ký hay mã hóa dữ liệu. Mỗi khóa
cơng khai được cơng bố tương ứng sẽ có một khóa bí mật. Dữ liệu được mã
hóa bởi khóa cơng khai chỉ có thể giải mã bằng khóa bí mật tương ứng với nó.


15

Cách thức hoạt động đơn giản của mã hóa khóa cơng khai.

Hình 1.2 Mã hóa khóa cơng khai

Tư tưởng về hệ mã khố cơng khai được Diffie và Hellman đề xuất vào 1976.
Sau đó, hệ mã khố cơng khai đầu tiên được xây dựng vào năm 1977 bởi ba
nhà toán học Rivest, Shamir và Adleman, do đó có tên là hệ mã RSA.
Hệ mã RSA dựa trên bài toán phân tích số nguyên n thành tích các thừa số
nguyên tố. Các phép tốn thực hiện trên  n trong đó n là tích của hai số
nguyên tố lẻ p và q. Để ý rằng   n    p  1 q  1 . Hệ RSA được mô tả
như sau
Đặt n  pq, p và q là hai số nguyên tố.
Đặt P  C   ns và




K   n, p, q, a, b  : n  pq; p và q : nguyên tố, ab  1mod   n   .
Với k  K , đặt

ek  x   x b mod n;
d k  y   y a mod n,

 x, y   n  ;

n và b là khóa cơng khai;

p, q, a là khóa mật.
Dễ có d k  ek  x    x, x  n . Thật vậy, vì


16

ab  1mod   n  
nên có thể đặt ab  t  n   1.
Giả sử x   n . Khi đó, ta có

x 
b

a

 x ba  x t  n   1mod n




n

 x

t

 x mod n

 1t x mod n
 x mod n.
Ví dụ 1.5 Giả sử B chọn p  13 và q  23. Khi đó, tính được n  299 và

  n    p  1 q  1  264.
Chọn b tùy ý sao cho 1  b  264, giả sử B chọn b  25. Khi đó, ta tính a
bằng thuật tốn Euclide mở rộng

ab  1mod   n  

25a  1mod  264 
 25 X  264Y  1

1  X  264
264 = 10.25 + 14
25 = 1.14 + 11
14 = 1.11 + 3
11 = 3.3 + 2
3 = 1.2 + 1
2 = 1.2 + 0 (dừng).



17

Lập bảng

 qk

k
-1

k

k

1

0

0

-10

0

1

1

-1


1

-10

2

-1

-1

11

3

-3

2

-21

4

-1

-5

74

5


-2

-95

25.(-95)  1 mod(264), do (25, 264) =1
-95  169 mod(264)
 25.169  1 mod(264)
a = b1 = 169 mod 299.
B công khai bộ (n = 299, b = 169).
Bây giờ, giả sử A muốn gửi bản rõ 14 cho B, A sẽ tính
14 169 mod 299 = 40, là bản mã.
Khi B nhận được 40, anh ta sẽ tính
40 169 mod 299 = 14
và thu được bản rõ A muốn gửi.
Độ mật của hệ mã RSA dựa trên giả thiết rằng hàm mã ek là hàm một chiều,
như thế người thứ ba khơng thể phá khố trong khoảng thời gian chấp nhận
được. Thông tin mật mà B có để giải mã chính là phân tích thừa số của n,

n  pq. Nhờ đó, B có thể dễ dàng tính được   n    p  1 q  1 và xác định
a theo thuật toán Euclidean mở rộng.


18

Mơ tả RSA
Việc thực hiện hệ RSA có nhiều vấn đề cần giải quyết, ví dụ như về độ mật,
làm thế nào để mã hố và giải mã nhanh chóng. Một cách hình thức, các bước
thực hiện mã hố RSA có thể mơ tả như sau
B1. B sinh ra hai số nguyên tố lớn p và q.
B2. B tính n  pq và   n    p  1 q  1 .

B3. Chọn ngẫu nhiên số b  0  b    n   sao cho gcd  b,  n    1.
B4. B tính a  b 1 mod   n  bằng thuật tốn Euclide.
B5. B cơng khai n và b như là khoá.
Hàm mã hoá: ek  x   xb mod n.
Hàm giải mã: d k  y   y a mod n.
Luỹ thừa số lớn
Các bước mã hoá và giải mã đều liên quan đến các phép tốn luỹ thừa. Bởi vì
n rất lớn, ta cần có các thuật tốn hiệu quả để tính toán trong  n .
Giả sử n dài k bit. Ta có phép cộng hai số nguyên k bit có thể thực hiện trong
thời gian O  k  , cịn phép nhân có thể thực hiện trong O  k 2  . Hơn nữa, phép
chia mod n của số nguyên dài 2k bit có thể thực hiện trong thời gian O  k 2  .
Giả sử có x, y   n . Khi đó, xy mod n được thực hiện qua hai phép toán nhân
và lấy module, có thể thực hiện trong O  k 2  . Gọi phép xy mod n là phép lấy
mod nhân.


19

Để thực hiện phép lấy mod luỹ thừa, ta dùng thuật tốn “bình phương và nhân
liên tiếp”, cho phép thực hiện nhiều nhất 2 l phép nhân với l là độ dài của c
trong biểu diễn cơ số 2 log2c. Từ l  k, ta có thuật tốn thực hiện trong thời
gian O  k 3  . Thuật toán được mơ tả như sau
(thuật tốn tính z  xb )
z=1
for i = l  1 downto 0 do begin
z = z2 mod n
if bi = 1 then z  z  x mod n
end
trong đó số mũ b có biểu diễn nhị phân là b1b2 ...bl .
Nhận xét

Ta có thể thấy rằng, một phương thức tấn công hiển nhiên sử dụng phép phân
tích n ra thừa số. Nếu phân tích được thì dễ dàng tính   n  và từ đó xác định
được a giống như B làm. (Người ta đã giả thiết rằng phá hệ RSA tương đương
đa thức với bài tốn phân tích n ra thừa số).
Tất nhiên, để có thể áp dụng thì n phải đủ lớn để cho phân tích n ra thừa số là
phi thực tế. Các thuật tốn hiện nay có thể phân tích một số 130 chữ số. Tuy
nhiên, để đảm bảo an tồn thì các số p và q phải có kích thước vào khoảng
100 chữ số để n có kích thước khoảng 200 chữ số. Các hệ mã ứng dụng hiện
nay thường dùng mã 512 bit (tức là có kích thước khoảng 154 chữ số), kích
thước đó chưa đảm bảo an tồn cao. Điều đó chứng tỏ để đảm bảo an tồn,
khố cần phải có kích thước ít nhất 1024 bit.


20

1.4 Nguyên tắc của nén dữ liệu
Nhiều dữ liệu đòi hỏi phải được nén trước khi phát vì các ứng dụng đó sử
dụng các mạng truyền dẫn cơng cộng (PSTN chẳng hạn). Rõ ràng, đối với
một cuộc gọi để truyền dẫn dữ liệu, nếu giảm được thời gian truyền dẫn thì sẽ
tiết kiệm được chi phí.
Giả sử, chúng ta đang truyền dữ liệu dùng modem 4800 bps trên PSN và thời
gian truyền là 20 phút. Nếu nén dữ liệu xuống cịn một nửa thì thời gian
truyền chỉ cịn 10 phút và do đó tiết kiệm được 50% cước phí. Nói cách khác,
chúng ta đạt được cùng một hiệu quả khi dùng modem 4800 bps để truyền dữ
liệu có nén với dùng modem 9600 bps để truyền dữ liệu chưa nén.
Có thể sử dụng nhiều thuật toán nén dữ liệu khác nhau. Mỗi một thuật tốn
thích hợp với một kiểu dữ liệu nhất định. Một số modem có đặc điểm nén
thích ứng (adaptive), nghĩa là chúng có khả năng chọn một thuật tốn nén
thích hợp để nén phụ thuộc vào kiểu dữ liệu cần truyền.
Nén dữ liệu là một biểu hiện hết sức sinh động của lý thuyết thơng tin. Đó là

ngành toán học ra đời vào cuối những năm 1940 từ các cơng trình nghiên cứu
của Claude Shanon ở Bellads. Nó liên quan đến nhiều vấn đề về thơng tin,
bao gồm các phương pháp khác nhau dùng để xử lý, lưu trữ và truyền thông
tin.
Nén dữ liệu liên quan với khái niệm độ dư thừa dữ liệu (Data Redundency).
Thông thường, hầu hết các tập tin trong máy tính có rất nhiều thông tin dư
thừa, việc thực hiện nén tập tin thực chất là mã hoá lại các tập tin để loại bỏ
các thơng tin dư thừa.
Nhìn chung, khơng thể có phương pháp nén tổng quát nào cho kết quả tốt đối
với tất cả các loại tập tin, vì nếu khơng ta sẽ áp dụng n lần phương pháp nén
này để đạt được một tập tin nhỏ tuỳ ý. Kỹ thuật nén tập tin thường được áp


21

dụng cho các tập tin văn bản (trong đó có một số kí tự nào đó có xác suất xuất
hiện nhiều hơn các kí tự khác), các tập tin ảnh bitmap (mà có thể có những
mảng lớn đồng nhất), các tập tin dùng để biểu diễn âm thanh dưới dạng số
hố và các tín hiệu tương tự (analog signal) khác (Các tín hiệu này có thể có
các mẫu được lặp lại nhiều lần). Ðối với các tập tin nhị phân như tập tin
chương trình thì sau khi nén cũng khơng tiết kiệm được nhiều.
Ngoài ra, trong một số trường hợp để nâng cao hệ số nén người ta có thể bỏ
bớt một số thơng tin của tập tin (Ví dụ như kỹ thật nén ảnh JPEG).
1.5 Nén dữ liệu = Mơ hình hóa + Mã hóa
Một cách tổng qt, nén dữ liệu là biến đổi một luồng các ký tự thành một
luồng các bản mã. Nếu các luồng bản mã có kích thước nhỏ hơn các luồng ký
tự thì chứng tỏ kỹ thuật nén có tác dụng. Việc lựa chọn để đưa ra một bản mã
nhất định đối với một ký tự hoặc một tập ký tự nhất định được thực hiện dựa
trên mơ hình (model). Mơ hình là một tập hợp dữ liệu cùng các qui tắc được
dùng để xử lý các ký tự vào và đưa ra các bản mã. Một mơ hình sẽ xác định

chính xác xác suất xuất hiện của từng ký tự và một bộ mã hóa sẽ tạo ra các
bản mã dựa trên các xác suất đó.
Mơ hình hóa và mã hóa là hai vấn đề hoàn toàn khác nhau. Thế nhưng, người
ta vẫn quen dùng từ “mã hóa” để chỉ cho cả quá trình nén dữ liệu mặc dù đó
mới chỉ là một giai đoạn của q trình đó. Chẳng hạn, ta vẫn dùng “Mã hóa
Huffman”, “Mã hóa Run-Length”, … để nói về các kỹ thuật nén dữ liệu trong
khi đó chúng thực chất chỉ là phương pháp mã hóa được sử dụng cùng với các
mơ hình nào đó để nén dữ liệu.
Lấy mã Huffman quen thuộc làm ví dụ, ta thấy một quá trình nén dữ liệu đầy
đủ được biểu diễn như Hình 1.3.


22

Các ký hiệu
Luồng vào

Các bản mã

Các xác suất
Mơ hình

Mã hóa

Luồng ra

Hình 1.3 Sơ đồ nén Huffman

1.6 Mơ hình hóa nguồn dữ liệu
Nếu chúng ta ví nén dữ liệu như là một chiếc ơ tơ thì phương pháp mã hóa là

các bánh xe, cịn mơ hình mới là động cơ của nó. Bất chấp hiệu quả của bộ
mã hóa, nếu khơng có một mơ hình tốt sẽ khơng có nén dữ liệu.
Nén khơng tổn hao nói chung được thực hiện dựa trên một trong hai kiểu mơ
hình khác nhau: Mơ hình thống kê (Statistics) và mơ hình từ điển (Dictionarybased). Nén dữ liệu dùng mơ hình thống kê sẽ mã hóa mỗi lúc một ký tự dựa
vào xác suất xuất hiện của nó. Nén dữ liệu dùng mơ hình từ điển sẽ mã hóa
một chuỗi ký tự chỉ bằng một bản mã, ở đây vai trị của mơ hình trở nên cực
kỳ quan trọng.
1.6.1 Mơ hình thống kê
Mơ hình thống kê đơn giản nhất là một bảng tĩnh liệt kê các giá trị xác suất.
Trước đây, do việc phân tích và xây dựng cây mã Huffman rất tốn thời gian
nên người ta thường chỉ phân tích một lần đối với các khối dữ liệu điển hình
để có được một bảng đếm số lần xuất hiện của từng ký tự. Dựa vào kết quả
đó, một cây Huffman tĩnh được xây dựng và lưu trữ để có thể sử dụng được
nhiều lần. Một mơ hình như vậy được gọi là mơ hình thống kê tĩnh (StaticStatistical Model).


23

Việc sử dụng một mơ hình vạn năng cho nhiều kiểu dữ liệu rõ ràng là có
nhiều hạn chế. Nếu luồng vào khơng thích hợp với mơ hình thì hiệu quả nén
sẽ giảm, thậm chí có khi kết quả là ngược lại, luồng ra sẽ có kích thước lớn
hơn luồng vào (nở dữ liệu).
1.6.2 Mơ hình từ điển
Các mơ hình thống kê có đặc điểm chung là mã hóa (và giải mã) mỗi lúc một
ký hiệu, trong khi các mô hình từ điển làm việc theo cơ chế hồn tồn khác.
Chúng đọc dữ liệu vào rồi tìm một nhóm ký tự tương hợp hiện có trong một
từ điển, nếu tìm thấy thì chúng xuất ra một con trỏ đến nhóm ký hiệu đó chứ
khơng phải xuất ra một bản mã như các mơ hình thống kê đã làm. Dữ liệu đọc
vào càng tương hợp với nhóm ký tự tìm thấy trong từ điển thì hiệu quả nén
càng cao. Ở đây, phương pháp mã hóa khơng thành vấn đề, vấn đề chính cần

phải tập trung giải quyết là mơ hình.
Một từ điển tĩnh (Static Dictionary) tựa như một danh sách tài liệu tham khảo
dùng trong sách báo khoa học. Trong suốt bài báo cáo, các tác giả thường
thay thế các sách tham khảo bằng một con số nằm trong ngoặc vuông. Con số
đó trỏ đến một cuốn sách hoặc một bài báo khác có trong danh sách tài liệu
tham khảo. Việc chỉ dùng một con số để khỏi phải viết đầy đủ cả đầu đề của
một bài báo hoặc cuốn sách (nếu xảy ra nhiều lần) rõ ràng có tác dụng rút
ngắn được bài báo đang viết.
Nhược điểm của mơ hình từ điển tĩnh cũng giống như nhược điểm của mơ
hình thống kê tĩnh. Từ điển cũng phải phát đi trước khi phát dữ liệu được mã
hóa do đó làm giảm hiệu quả nén. Để tránh nhược điểm đó, phải sử dụng một
từ điển động.
Một từ điển động tựa như cách người ta viết tắt trong sách giáo khoa. Muốn
viết tắt một cụm từ nào đó thì lần xuất hiện đầu tiên của nó sẽ được kèm theo


24

các ký tự viết tắt trong cặp ngoặc đơn. Từ đó về sau chỉ sử dụng cụm ký tự
viết tắt đó mà thơi. Ví dụ: Cơng ty trách nhiệm hữu hạn thương mại và dịch
vụ Thắng Lợi (CTTNHH TM&DV TL) ... CTTNHH TM&DV TL hoạt động
trong lĩnh vực ...
1.7 Một số phương pháp nén dữ liệu
Các kỹ thuật nén dữ liệu có thể chia thành hai loại chính
 Nén khơng tổn hao (Lossless);
 Nén tổn hao (Lossy).
Nén tổn hao chấp nhận mất mát một lượng thông tin nhất định để đạt được
hiệu quả nén cao. Nén tổn hao thích hợp với dữ liệu là hình ảnh và âm thanh
số hóa. Hầu hết các kỹ thuật nén tổn hao đều có thể điều chỉnh để cân bằng
giữa độ chính xác và hiệu quả nén. Cho đến gần đây, nén tổn hao vẫn được

thực hiện bằng phần cứng chuyên dụng. Ngược lại nén không tổn hao đảm
bảo tạo được một bản sao chính xác của dữ liệu sau một q trình mã hóa/giải
mã. Đây chính là các kỹ thuật nén được sử dụng để lưu trữ và truyền các cơ
sở dữ liệu, các bảng tính điện tử và các văn bản.
1.7.1 Phương pháp mã hóa độ dài loạt (Run Length Coding)
Loại dư thừa đơn giản nhất trong một tập tin là các đường chạy dài gồm các
kí tự lặp lại, điều này thường thấy trong các tập tin đồ hoạ bitmap, các vùng
dữ liệu hằng của các tập tin chương trình, một số tập tin văn bản ...
Ví dụ 1.6 Xét chuỗi sau
AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD
Chuỗi này có thể được mã hố một cách cơ đọng hơn bằng cách thay thế
chuỗi kí tự lặp lại bằng một thể hiện duy nhất của kí tự lặp lại cùng với một


×