Ch°¡ng 5: Xây dąng āng dāng t¿o và xác thąc chă ký số Trong ch°¡ng này chúng ta sẽ ti¿n hành chắt lọc nhăng tinh hoa vÁ chă ký số và t¿o ra một ch°¡ng trình có khả năng xác t¿o ra chă ký
Trang 1TR¯ÞNG Đ¾I HàC CÔNG NGHIÞP THĂC PHÆM
TP HCM
KHOA CÔNG NGHà THÔNG TIN
Ngành An Toàn Thông Tin
-o0o -
Đà ÁN MÔN HàC
ĐÀ TÀI : TÌM HIÂU VÀ CHĀ KÝ ĐIÞN Tþ VÀ XÂY
ĐIÞN Tþ
Sinh viên th ąc hián:
Gi ảng viên h°ớng dẫn: M ¿nh Thiên Lý
TP Hồ Chí Minh, Tháng 6 năm 2021
Trang 2L ÞI CÀM ¡N
Chúng em xin chân thành gāi lßi cảm ¡n sâu sắc tới cô M¿nh Thiên Lý - ng°ßi luôn chỉ bảo, nhắc nhá, h°ớng dẫn, cung cấp nhăng tài liáu quý giá, ki¿n thāc bổ ích
và dẫn dắt tāi em hoàn thành đồ án này
Chúng em cũng xin gāi lßi cảm ¡n các thầy cô giáo trong khoa Công nghá thông tin - tr°ßng Đ¿i học Công nghiáp Thąc phẩm TP HCM và gia đình đã t¿o điÁu kián giúp đỡ vÁ vật chất và tinh thần đà chúng em có thà tập trung và có động ląc đà hoàn thành tốt đồ án này
Sinh viên thąc hián
Nguyßn Văn Quang Đào Chi¿n Thắng
Trang 3NH ¾N XÉT CĂA GIÁO VIÊN H¯àNG DÈN
Nhóm sinh viên gồm : 1 Nguyßn Văn Quang MSSV: 2033181060
2 Đào Chi¿n Thắng MSSV: 2033181066 Nhận xét
: ………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
ĐiÃm đánh giá: ………
………
………
………
………
………
………
………
Ngày ……….tháng ………….năm 2021
( Ký tên, ghi rõ họ và tên)
Trang 4M ĀC LĀC
L ÞI CÀM ¡N 2
NH ¾N XÉT CĂA GIÁO VIÊN H¯àNG DÈN 3
M ĀC LĀC 4
DANH M ĀC HÌNH ÀNH 7
THU ¾T NGĀ VI¾T TÀT 8
L ÞI NÓI ĐÄU 9
T ÞNG QUAN VÀ CÁC LO¾I MÃ HOÁ 11
CH¯¡NG 1. 1.1 Giới thiáu vÁ mật mã học 11
Mật mã học là gì? 11
1.1.1 Các thành phần mật mã học 11
1.1.2 Quy trình c¡ bản cÿa mật mã học 12
1.1.3 1.2 Phân lo¿i há mã hoá 12
Há mã dòng - Stream Cipher 12
1.2.1 Há mã khối - Block Cipher 13
1.2.2 Há mã hoá đối xāng 14
1.2.3 Há mã hoá bất đối xāng 20
1.2.4 Há mã hoá RSA 21
1.2.5 HÀM BM (HASH) 26
CH¯¡NG 2. 2.1 S¡ l°ÿc vÁ hàm băm 26
2.2 Khái niám hàm băm 26
2.3 Tính chất cÿa hàm băm 26
2.4 Thuộc tính cần thi¿t 26
2.5 Cách ho¿t động cÿa hàm băm 27
2.6 Các lo¿i hàm băm phổ bi¿n 28
MD5 (Message - Digest Algorithm 5) 28 2.6.1
Trang 5SHA (Secure Hashing Algorithm) 29
2.6.2 2.7 Āng dāng cÿa hàm băm 30
LÝ THUY ¾T VÀ CHĀ KÝ SÞ 32
CH¯¡NG 3. 3.1 Giới thiáu vÁ chă ký số 32
3.2 Khái niám chă ký số 32
3.3 Các °u điÃm cÿa chă ký số 32
3.4 Quy trình t¿o và xác thąc chă ký số 34
Thuật toán t¿o khoá 34
3.4.1 T¿o chă ký và ký vào thông điáp 34
3.4.2 KiÃm tra và xác thąc chă ký số 34
3.4.3 M ÞT SÞ QUY ĐÞNH, THÔNG T¯ VÀ CHĀ KÝ SÞ 37
CH¯¡NG 4. 4.1 Quy định vÁ ký số, kiÃm tra chă ký số trên văn bản đián tā trong c¡ quan nhà n°ớc viát nam 37
Quy định vÁ giá trị pháp lý cÿa chă ký số 37
4.1.1 Quy định vÁ điÁu kián t¿o chă ký số đảm bảo an toàn đối với các đ¡n vị 4.1.2 cung cấp 37 4.2 Chāng th° số, chă ký số n°ớc ngoài t¿i viát nam 38
Đối t°ÿng sā dāng chāng th° số n°ớc ngoài 38
4.2.1 Đối t°ÿng sā dāng chāng th° số n°ớc ngoài 38
4.2.2 Ph¿m vi ho¿t động và thßi h¿n giấy phép sā dāng chāng th° số n°ớc ngoài 4.2.3 t¿i Viát Nam 38
Đối với thuê bao sā dāng chāng th° số n°ớc ngoài t¿i Viát Nam: 38
4.2.4 Đối với tổ chāc cung cấp dịch vā chāng thąc chă ký số n°ớc ngoài có 4.2.5 chāng th° số đ°ÿc công nhận t¿i Viát Nam 39
XÂY D ĂNG ĄNG DĀNG T¾O VÀ XÁC THĂC CHĀ KÝ CH¯¡NG 5 S Þ 40
5.1 Giới thiáu vÁ phần mÁm 40
5.2 Thąc hián t¿o khóa bí mật và khóa công khai 41
Trang 65.3 Thąc hián t¿o chă ký số bằng giải thuật RSA 43 5.4 Thąc hián giải mã đà xác thąc cho chă ký đ°ÿc t¿o bằng giải thuật RSA
45
K ¾T LU¾N 48
PH Ā LĀC 49 TÀI LI ÞU THAM KHÀO 51
Trang 7DANH M ĀC HÌNH ÀNH
Hình 1.1 Mô hình mã hoá dă liáu c¡ bản 12
Hình 1.2 Mô hình vÁ há mã hoá dòng Stream Cipher 13
Hình 1.3 Mô hình vÁ há mã hoá khối Block Cipher 14
Hình 1.4 Bảng ví dā sắp x¿p thuật toán mã hoá thay th¿ 15
Hình 1.5 Bảng mã dịch chuyÃn 17
Hình 1.6 Cách ho¿t động cÿa playfair 18
Hình 1.7 Cách x¿p ma trận khóa cÿa playfair 19
Hình 1.8 K¿t quả trả vÁ khi dùng playfair 19
Hình 1.9 Quy trình mã hoá RSA 23
Hình 2.1 S¡ đồ ho¿t động hàm băm 27
Hình 2.2 Ví dā vÁ hàm băm 28
Hình 2.3 Ví dā vÁ hàm băm MD5 bằng công cā HashCalc 29
Hình 3.1 Quy trình t¿o và xác thąc chă ký số 35
Hình 5.1 Giao dián started cÿa phần mÁm 40
Hình 5.2 Các độ dài khóa mà ch°¡ng trình hỗ trÿ 41
Hình 5.3 Code truyÁn giá trị độ dài khoá vào đối t°ÿng RSA 41
Hình 5.4 Code t¿o khoá công khai và bí mật 42
Hình 5.5 Khóa bí mật và khoá công khai 43
Hình 5.6 Giao dián t¿o chă ký số 43
Hình 5.7 Tuỳ chọn nén file sau khi t¿o thành công chă ký 45
Hình 5.8 Giao dián xác thąc chă ký số 46
Hình 5.9 Chă ký giống với văn bản 46
Hình 5.10 Chă ký không giống với văn bản 47
Trang 8THU ¾T NGĀ VI¾T TÀT Tên vi¿t tÁt Tên ti¿ng anh Tên ti¿ng viát
DES Data Encryption Standard Chuẩn mã hoá dă liáu
RSA Rivest - Shamir - Adleman Há mã hoá khoá công khai RSA
MAC Message Authentication Code Mã xác thąc thông báo
MD Message - Digest Algorithm Thuật toán tóm tắt hóa thông điáp
Trang 9L ÞI NÓI ĐÄU
Tÿ thuá xa x°a, trong các ho¿t động giao dịch giăa các bên đÁu cần các bián pháp xác thąc đà đảm bảo tính an toàn cÿa giao dịch, và đà có thà chāng thąc hay xác minh ta có rất nhiÁu cách, trong số đó chă ký vi¿t tay là hình thāc đ¡n giản và an toàn nhất Nh°ng trong thßi đ¿i hián nay chă ký vi¿t tay ngày càng kém hiáu quả, vì nó hoàn toàn có thà bị làm giả và są bất tián cÿa viác phải đồng thßi có są hián dián cÿa hai bên đà có thà ký k¿t hÿp đồng Nhất là thßi gian gần đây khi dịch bánh ngày càng hoành hành và con ng°ßi phải h¿n ch¿ ti¿p xúc với nhau khi¿n điÁu đó càng trá nên khó khăn
à thßi điÃm công nghá phát triÃn nh° bây giß, viác giao dịch trên m¿ng trá nên khá quen thuộc với mỗi ng°ßi, và trong các cuộc giao dịch yêu cầu cần có các hÿp đồng thì l¿i đặt ra các vấn đÁ lớn vÁ tính xác thąc và an toàn cÿa hÿp đồng vì nó có thÃ
bị lÿi dāng bái <bên thā ba= hoặc cả hai bên thąc hián giao dịch cho các māc đích xấu
Tÿ nhăng vấn đÁ vÁ trên, chă ký đián tā đã đ°ÿc cho ra đßi đà giải quy¿t chúng Bản thân chă ký đián tā mang một số nét t°¡ng đồng với chă ký vi¿t tay nh°ng bảo mật an toàn h¡n vì có sā dāng các công nghá mã hóa, chāng thąc và hàm băm Đó cũng là lý do t¿i sao mà chúng em chọn đÁ tài đồ án môn học: <TÌM HIÂU VÀ CHĂ
KÝ ĐIàN TĀ VÀ XÂY DĄNG ĀNG DĀNG T¾O VÀ XÁC THĄC CHĂ KÝ ĐIàN TĀ= cùng với māc tiêu nắm văng đ°ÿc ki¿n thāc vÁ chă ký số và t¿o ra một āng dāng trên nÁn tảng Window có thà t¿o và xác thąc chă ký số, góp phần cống hi¿n cho đßi sống thành quả tÿ nhăng kinh nghiám và ki¿n thāc thu đ°ÿc sau khi thąc hián đồ án này
Ngoài phần má đầu và k¿t luận, đồ án này bao gồm 5 ch°¡ng
Ch°¡ng 1: Tổng quan vÁ các lo¿i mã hoá
Trong ch°¡ng này chúng ta sẽ đ°ÿc bi¿t thêm vÁ các khái niám mã hoá, một số các ph°¡ng pháp mã hoá, các dẫn chāng, ví dā cā thà và giới thiáu chi ti¿t vÁ thuật
toán khoá công khai RSA
Trong ch°¡ng này chúng ta sẽ tìm hiÃu khái niám vÁ chă ký số và các quy trình
đà t¿o và xác thąc chă ký số áp dāng tÿ ki¿n thāc á ch°¡ng 1 và 2
Ch°¡ng 4: Một số luật và quy định vÁ dịch vā chă ký số
Trang 10Trong ch°¡ng này chúng ta tìm hiÃu và nắm rõ đ°ÿc một số thông t°, nghị định, luật đ°ÿc Nhà n°ớc ban hành vÁ chă ký số, āng dāng thąc t¿ trong giao dịch giăa các quốc gia
Ch°¡ng 5: Xây dąng āng dāng t¿o và xác thąc chă ký số
Trong ch°¡ng này chúng ta sẽ ti¿n hành chắt lọc nhăng tinh hoa vÁ chă ký số
và t¿o ra một ch°¡ng trình có khả năng xác t¿o ra chă ký số cũng nh° có thà xác thąc chă ký số đã t¿o bằng các thuật toán mã hoá RSA và hàm băm
Trang 11TÞNG QUAN VÀ CÁC LO¾I Mà HOÁ CH¯¡NG 1.
Mật mã học đi liÁn với quá trình mã hoá (Cryptography) - cách thāc chuyÃn đổi nội dung cÿa một văn bản, một tập tin sang một d¿ng dă liáu khác (bản mờ), khi¿n chúng khó có thà đọc đ°ÿc bái nhăng truy cập bất hÿp pháp đ¿n dă liáu đ°ÿc truyÁn
đi - và quá trình giải mã (Cryptanalysis) - quá trình chuyÃn đổi bản mß đã qua mã hoá
thành d¿ng văn bản gốc có thà đọc đ°ÿc (bản gốc) Hai quá trình này đảm bảo tính bí mật cho các thông tin, dă liáu quan trọng chẳng h¿n nh° trong quân są, tình báo, ngo¿i giao, kinh t¿, th°¡ng m¿i, …
Vào các năm gần đây, ph¿m vi āng dāng cÿa mật mã hóa đ°ÿc má rộng vô cùng rộng rãi Mật mã hóa hián đ¿i cung cấp c¡ ch¿ cho nhiÁu ho¿t động trong đßi sống sinh ho¿t h¡n là chỉ duy nhất có công dāng giă bí mật và có một lo¿t các āng dāng nh°: Các giao dịch tài chính, chuyÃn khoản, mua sắm hàng hoá, th° tÿ, tài liáu, chāng thąc khóa công khai, bầu cā đián tā hay tiÁn đián tā, … Mọi thā đ°ÿc thąc hián nhiÁu qua môi tr°ßng m¿ng đòi hỏi dă liáu phải đ°ÿc bảo mật tốt dẫn đ¿n viác tất cả quá trình trao đổi đó đÁu phải đ°ÿc mã hoá Thậm chí nhăng ng°ßi không có nhu cầu
vÁ tính bí mật cũng sā dāng các công nghá mật mã hóa, th°ßng đ°ÿc các kỹ s° thi¿t k¿
và thi¿t lập sẵn trong các c¡ sá h¿ tầng cÿa công nghá tính toán và liên l¿c vißn thông
Các thành phần mật mã học
1.1.2
M ột hệ mã hoá bao gồm các yếu tố quan trọng sau:
Thông báo, văn bản gốc M: Là một chuỗi hău h¿n các ký hiáu lấy tÿ một bảng chă cái Z nào đó và đ°ÿc ký hiáu là M
Mã hoá: Là quy trình bi¿n đổi văn bản gốc khi¿n nó không thà đọc đ°ÿc đối với bất kỳ ng°ßi khác ngoài ng°ßi nhận đ°ÿc mong muốn
Phép mã hoá th°ßng đ°ÿc ký hiáu là e (M), với M là thông báo cần mã hoá
Khoá K: Là một thông số đầu vào cÿa phép mã hoá hoặc giải mã Khoá dùng đÃ
mã hoá ký hiáu là Ke, khoá dùng đà giải mã ký hiáu là Kd
Chuỗi mật mã, bản mß C: Là dă liáu bản gốc đã đ°ÿc mã hoá, ký hiáu là:
c = e (m, ke)
Trang 12 Giải mã: Là quá trình ng°ÿc l¿i với mã hoá, dùng khoá K đà chuyÃn dă liáu bản
mß C vÁ l¿i dă liáu gốc M, ký hiáu là:
d (c, kd) = m
Quy trình cơ bản của mật mã học
1.1.3
Ví d ụ 1.1 về quy trình cơ bản cÿa mật mã học
A (ng°ßi gāi) muốn gāi cho B (ng°ßi nhận) một thông báo m (bản rõ), A dùng thuật toán phép mã hoá e k¿t hÿp khoá K (key) đà bi¿n thông báo m thành chuỗi mật
mã c (bản mß) và gāi cho B Bản c đ°ÿc truyÁn đi qua bằng các kênh truyÁn bình th°ßng, giả sā có bị một ng°ßi xấu hay một hacker bắt đ°ÿc gói tin c thì cũng không thà đọc đ°ÿc vì thông báo đã bị mã hoá, còn khoá K, A gāi cho B bằng một thuật toán truyÁn khoá bí mật Đ¿n n¡i, B thu thập khoá K và chuỗi mật mã c l¿i, sā dāng thuật toán phép giải mã d k¿t hÿp khoá K đà chuyÃn chuỗi mật mã c trá vÁ thông báo gốc m Vậy là thông báo đã đ°ÿc truyÁn đi một cách an toàn tÿ A đ¿n tay B
Hình 1.1 Mô hình mã hoá d ữ liệu cơ bản
1.2 PHÂN LO¾I HÞ MÃ HOÁ
Mật mã học đ°ÿc chia ra thành hai ph°¡ng pháp mã hoá dă liáu, đó là hệ mã
hoá khoá đối xāng và há mã hoá khoá công khai Trong đó, mã hoá khoá công khai
đóng góp một phần lớn không thà thi¿u trong viác t¿o lập và xác thąc chă ký số Tr°ớc khi chúng ta đi vào phần tìm hiÃu hai há mã hoá trên thì chúng ta sẽ nghiên cāu qua lý thuy¿t vÁ há mã dòng và há mã khối
Hệ mã dòng - Stream Cipher
1.2.1
Với các há mã dòng (stream cipher), chúng ta sẽ thąc hián xā lý trên tÿng bit cÿa bản rõ ĐiÃn hình nhất cho một há mã dòng đã rất nổi ti¿ng đó là One Time Pad (OTP), chú ý OTP này khác với One Time Password Ta có m và khóa k có cùng độ dài (bit), One - Time - Pad đ°ÿc xác định nh° sau:
Trang 13E (m, k) = m XOR k = c
D (c, k) = c XOR k = (m XOR k) XOR k = m
Hình 1.2 Mô hình về hệ mã hoá dòng Stream Cipher
Với OTP, khóa k phải đáp āng đÿ 3 điÁu kián sau đây:
Độ dài cÿa khóa phải bằng kích th°ớc bản rõ
Khóa phải đ°ÿc chọn hoàn toàn ngẫu nhiên (truly random)
Và khóa chỉ đ°ÿc sā dāng một lần
N¿u thỏa mãn 3 điÁu kián trên, há mã OTP sẽ đ°ÿc xem là an toàn tuyát đối (perfect security) theo định lý cÿa Claude Shannon, tāc là kẻ tấn công sẽ không thà bi¿t đ°ÿc thông tin gì cÿa bản rõ m chỉ tÿ bản mã c
Bái vì các hàm mã hóa / giải mã chỉ đ¡n giản là thąc hián phép toán XOR trên các bit cÿa dă liáu đầu vào, do đó OTP cho ta tốc độ tính toán rất nhanh
Vì độ dài khoá và bản rõ bằng nhau, nên chúng ta th°ßng truyÁn 2 thā đó chung
với nhau một cách bí mật Đây cũng nh°ÿc điÃm cÿa OTP Trong thąc t¿, ng°ßi ta th°ßng t¿o ngẫu nhiên khoá K có kích th°ớc ngắn h¡n độ dài bản rõ, sau đó dùng một hàm t¿o số ngẫu nhiên (Pseudo Random Generator - PRG) đà tăng độ dài cÿa khóa k
đó
Vì vậy, thąc tißn cÿa OTP đ°ÿc sā dāng nh° sau:
E'(m, k) = E(m, PRG(k)) = m XOR PRG(k) = c
D'(c, k) = D(c, PRG(k)) = (m XOR PRG(k)) XOR PRG(k) = m, trong đó, k có kích th°ớc nhỏ h¡n rất nhiÁu so với m
Hệ mã khối - Block Cipher
1.2.2
Với các há mã khối, giống nh° tên gọi cÿa chúng, là các há mã hoá chia dă liáu đầu vào thành các khối bit có kích th°ớc cố định và thąc hián tính toán và mã hoá trên tÿng khối đó, kích th°ớc thông th°ßng là 64 hoặc 128 bit Vì lý do đó, khi đầu vào bản
rõ có độ dài không phải là bội số cÿa khối, ta cần phải thąc hián thao tác đám (padding) sao cho số bit cÿa đầu vào sau khi đám phải là bội số cÿa khối
Trang 14Hình 2.3 Mô hình v ề hệ mã hoá khối Block Cipher
Các há mã khối nổi ti¿ng đó là DES có kích th°ớc khối là 64 bit (tāc là mỗi lần
mã hóa một khối bản rõ 64 bit và cho ra khối bản mã 64 bit) và kích th°ớc khóa là 56 bit; AES có kích th°ớc khối là 128 bit và kích th°ớc khóa là 128, 192 hoặc 256 bit
Thông th°ßng các há mã hoá khối chậm h¡n so với các há mã hoá dòng, nh°ng làm viác tốt với nhăng khối dă liáu đã bi¿t tr°ớc kích th°ớc, ví dā mã hóa file, mã hóa tin nhắn trên giao thāc nh° là HTTP
Hệ mã hoá đối xứng
1.2.3
Trong mật mã học, các thuật toán khóa đối xāng (symmetric - key algorithms)
là một lớp các thuật toán mật mã hóa trong đó các khóa dùng cho viác mật mã hóa và giải mã là một Khoá cÿa há mã hoá này đ°ÿc dùng chung cho cả hai ng°ßi và đ°ÿc thống nhất với nhau tr°ớc mỗi giao dịch
Há mã hoá đối xāng phát triÃn thành hai giai đo¿n, giai đo¿n sā dāng các giải thuật mã hoá cổ điÃn và giai đo¿n sā dāng các giải thuật mã hoá hián đ¿i
1.2.3.1 Hệ mã hoá cổ điển
Các tính ch Ãt c¢ bÁn căa các giÁi thu¿t m¿t mã hoá là
Phải có tính bảo mật cao
Thuật toán phải dß dàng ti¿p cận nh°ng vẫn bảo mật, không phā thuộc vào giải thuật mà chú trọng vÁ khoá
Có thà áp dāng vào các āng dāng trên các thi¿t bị đián tā
M ßt sß giÁi thu¿t mã hoá cß điÃn
Mã thay thế đơn giản (Substitution Cipher)
Là ph°¡ng pháp mà tÿng ký tą (hay tÿng nhóm ký tą) trong thông tin gốc đ°ÿc thay th¿ bằng một ký tą (hay một nhóm ký tą) khác t¿o ra bản mã hoá Bên nhận khi
Trang 15nhận đ°ÿc bản mß chỉ cần đảo ng°ÿc quá trình thay th¿ á trên đà có đ°ÿc thông tin gốc ban đầu
Khoá th°ßng đ°ÿc biÃu dißn bằng một chuỗi 26 ký tą Có 26! (≈ 4.1026) hoán
vị (khoá)
• Ví dụ 1.2:
Khoá là chuỗi dlryvohezxwptbgfjqnmuskaci
Dąa vào khoá này chúng ta thay th¿ ký hiáu A trong thông báo bằng d, ký hiáu
B sẽ đ°ÿc thay bằng l, … cā th¿ đ¿n khi h¿t khoá
Cho một đo¿n thông tin gốc là MATMAHOC
Chúng ta tìm ra bản mß bằng cách thay th¿ các ký tą t°¡ng āng trong bảng d°ới đây
Hình 3.4 B ảng ví dụ sắp xếp thuật toán mã hoá thay thế
Tÿ đó chúng ta thu đ°ÿc k¿t quả: tdmtdegr
Mã thay thế n - gram
Mã thay th¿ n – gram là d¿ng mã hoá cao cấp h¡n mã thay th¿, thay vì thay th¿
ký tą, ng°ßi ta thay th¿ bản gốc cho tÿng cām 2 ký tą (diagram) hoặc cām 3 ký tą (trigram) hoặc thay th¿ tổng quát cho tÿng cām n ký tą (n - gram)
Với bảng chă cái gồm 26 ký tą ti¿ng Anh thì phép thay th¿ n - gram sẽ có khoá
là một hoán vị cÿa 26 n - gram khác nhau
Trong tr°ßng hÿp diagram thì chúng ta có thà biÃu dißn bằng một dãy 2 chiÁu
26 x 26 trong đó các hàng ngang biÃu dißn ký hiáu đầu tiên, các cột dọc biÃu dißn ký hiáu thā hai, nội dung cÿa các ô biÃu dißn chuỗi thay th¿ āng với các cột và hàng ngang cÿa bảng
Trang 16B BO SC
Mã hoán vị bậc d (Permutation Cypher)
Đối với một số nguyên d°¡ng d bất kỳ, mã hoán vị bậc d sẽ thąc hián chia thông báo m thành tÿng khối có chiÁu dài d Rồi lấy một hoán vị h cÿa 1, 2,3, …, d và
áp dāng h vào mỗi khối
• Ví dụ 1.3: N¿u d = 5 và h = (4 1 3 2 5), hoán vị (1 2 3 4 5) sẽ đ°ÿc thay th¿
bằng hoán vị mới (4 1 3 2 5)
• Ví dụ 1.4: Ta có thông báo
m = JOHN IS A GOOD ACTOR
Qua phép mã hoá này m sẽ trá thành chuỗi mật mã c sau:
c = NJHO AI S DGOO OATCR
Mã dịch chuyển (Shift Cypher)
• Trong ph°¡ng pháp Vigenère, khoá bao gồm một chuỗi có d ký tą Chúng đ°ÿc vi¿t lặp l¿i bên d°ới thông báo và đ°ÿc cộng modulo 26 Các ký tą trắng đ°ÿc giă nguyên không cộng
• N¿u d = 1 thì khoá chỉ là một ký tą đ¡n và đ°ÿc gọi là ph°¡ng pháp Caesar (đ°ÿc đ°a ra sā dāng đầu tiên bái Julius Caesar)
Trang 17Hình 4.5 B ảng mã dịch chuyển
Ví d ụ 1.5:
Tÿ khoá: CHIFFRE
Mã hoá: VIGENERE
K¿t quả thu đ°ÿc dąa trên bảng mã: XPOJSVVG
Mã tuyến tính (Affine Cipher)
Ph°¡ng pháp mã tuy¿n tính là một d¿ng mã hoá có d¿ng nh° sau:
e(x) = ax + b (mod 26), với a, b �㔖 ý26
Mã Playfair là một há mã hoá đa ký tą (mỗi lần mã hoá 2 ký tą liên ti¿p nhau),
sā dāng giải thuật dąa trên một ma trận các chă cái cố định d¿ng n × n (đối với bảng chă cái ti¿ng anh là 26 ký tą thì n = 5 hoặc bằng chă cái ti¿ng anh kèm theo 10 ký tą
số thì n = 6) đ°ÿc xây dąng tÿ một khóa (chuỗi các ký tą)
Xây dựng ma trận khóa:
Trang 18 Chúng ta thąc hián thêm lần l°ÿt các ký tą cÿa khoá vào ma trận theo chiÁu tÿ trên xuống, trái sang phải
N¿u khoá đã h¿t mà ma trận ch°a đÿ các ô, thąc hián thêm các ký tą còn l¿i trong bảng chă cái vào ma trận theo thā tą A – Z (bỏ qua nhăng ký tą đã có)
Ký tą I và J xem nh° 1 ký tą và x¿p vào cùng 1 ô cÿa ma trận (đối với ma trận
n = 5)
Các ký tą trong ma trận khoá không đ°ÿc trùng nhau
Giải thuật mã hóa:
Mã hóa tÿng cặp 2 ký tą liên ti¿p nhau
N¿u d° 1 ký tą, thêm ký tą <X= vào cuối
N¿u 2 ký tą nằm trên một dòng, thay th¿ bằng 2 ký tą bên phải cÿa 2 ký tą t°¡ng āng N¿u đ¿n cột cuối cùng thì ký tą đ°ÿc thay bằng ký tą cÿa cột đầu tiên
N¿u 2 ký tą nằm trên cùng một cột, thay th¿ bằng 2 ký tą bên d°ới t°¡ng āng
N¿u đ¿n hàng cuối cùng thì ký tą đ°ÿc thay bằng ký tą cÿa hàng đầu tiên
Tr°ßng hÿp còn l¿i (2 ký tą sẽ t¿o thành 2 góc cÿa hình chă nhật) sẽ đ°ÿc thay th¿ bằng 2 ký tą t°¡ng āng trên cùng dòng á hai góc còn l¿i
Hình 5.6 Cách ho ạt động cÿa playfair
Trang 19Hình 6.7 Cách x ếp ma trận khóa cÿa playfair
Hình 7.8 K ết quả trả về khi dùng playfair
Mã Hill
Gi ải thuật mã hóa của mã hill:
• Sā dāng m ký tą liên ti¿p cÿa plaintext và thay th¿ bằng m ký tą trong ciphertext với một ph°¡ng trình tuy¿n tính trên các ký tą đ°ÿc gán giá trị lần l°ÿt là A
= 01, B = 02, …
Z = 26
• Chọn ma trận vuông Hill (ma trận H) làm khoá
• Mã hoá tÿng chuỗi n ký tą trên plaintext (vector P) với n là kích th°ớc ma trận vuông Hill
• C = HP mod 26
• P = �㔻21C mod 26
¯u điÃm cÿa tất cả các ph°¡ng pháp mã hoá trên là tốc độ mã hoá và giải mã rất nhanh, bù l¿i nh°ÿc điÃm là khoá phải đ°ÿc truyÁn trên kênh truyÁn đảm bảo an toàn nên chi phí tốn kém, không kịp thßi và độ bảo mật kém
1.2.3.2 Hệ mã hóa hiện đại
Thßi đ¿i cÿa há mã hoá hián đ¿i bắt đầu khi tiêu chuẩn mật mã hóa dă liáu (Data Encryption Standard) - một ph°¡ng thāc mã hoá - đ°ÿc công bố t¿i Mỹ vào ngày 17/03/1975 Với chiÁu dài khoá chỉ là 56 bit, DES đã bị chāng minh là không đÿ sāc chống l¿i nhăng tấn công kiÃu vét c¿n (brute force attack - tấn công dùng b¿o ląc)
Có khá là nhiÁu thuật toán mã hoá khác đ°ÿc đÁ xuất đà thay th¿ cho DES Cā th¿, vào năm 2001, há mã hoá DES đã chính thāc đ°ÿc thay th¿ bái há mã hoá AES (Advanced Encryption Standard - Tiêu chuẩn mã hóa tiên ti¿n)
Tr°ớc đây, đa số các thuật toán mật mã hóa hián đ¿i đÁu chỉ là nhăng thuật toán
khóa đối xāng (symmetric key algorithms), bắt buộc cả ng°ßi gāi và ng°ßi nhận phải
dùng chung một khóa, và cả hai ng°ßi đÁu phải giă bí mật và ghi nhớ khóa này cho tÿng giao dịch, điÁu này dẫn đ¿n nhiÁu bất tián trong viác ghi nhớ và l°u tră khoá
Trang 20Chính vì th¿, một lần năa há mã hoá hián đ¿i đã chuyÃn mình sang một ch°¡ng mới đó
là há mã hoá dùng khoá công khai (hệ mã hoá bất đối xāng) VÁ há mã hoá bất đối xāng, chúng ta t¿o ra hai khoá bí mật và công khai, có quan há toán học đà dùng trong thuật toán, một dùng đà mã hóa và một dùng đà giải mã Ng°ßi ta chỉ còn cần phải nhớ một khoá bí mật cÿa họ và khoá còn l¿i sẽ đ°ÿc công khai cho mọi ng°ßi Phổ bi¿n nhất trong há mật mã này là há mã hoá RSA, chúng ta cùng tìm hiÃu trong māc ti¿p theo
Hệ mã hoá bất đối xứng
1.2.4
Há mã hóa bất đối xāng (asymmetric cryptography) hay còn gọi là há mã hóa
khoá công khai, là một há mã hóa sā dāng một cặp key đà mã hóa và giải mã: public key (khóa công khai) dùng đà mã hóa và private key (khóa bí mật) đà giải mã
Khi chúng ta sā dāng, bất cā ng°ßi gāi nào cũng có thà sā dāng khoá công khai cÿa ng°ßi nhận đà mã hóa bản tin và gāi cho ng°ßi nhận Nh°ng một điÁu hiÃn nhiên
là ng°ßi sá hău khoá bí mật sẽ giă nó cho riêng mình, và do đó, chỉ chÿ sá hău nó mới
có thà giải mã và đọc đ°ÿc thông điáp
Thông th°ßng thì cặp khóa đ°ÿc sinh này sẽ cố gắng đảm bảo rằng tÿ public key rất khó (gần nh° là không thÃ) truy ra đ°ÿc private key Vì vậy, bất cā kẻ tấn công nào n¿u có đ°ÿc public key (điÁu này khá dß dàng) cũng không thà có đ°ÿc private key đà giải mã
1.2.4.3 Một vài hệ mã hoá khoá công khai tiêu biểu
Hệ mật mã RSA
Đây là há mã hoá đã đánh dấu są ti¿n bộ v°ÿt bậc trong lĩnh vąc mật mã khoá công khai, đ°ÿc āng dāng nhiÁu trong thąc tißn Chúng ta sẽ tìm hiÃu sâu h¡n vÁ há
mã hoá này á māc 1.2.5
Hệ mật mã xếp ba lô Merkle - Hellman
Há mã hoá Merkle - Hellman và các há liên quan dąa trên tính phāc t¿p cÿa bài toán tổng hÿp các tập con (bài toán này là bài toán NP (nondeterministic polynomial time) đầy đÿ - là một lớp khá lớn các bài toán không có giải thuật đ°ÿc bi¿t trong thßi gian đa thāc) Tuy nhiên cho tới nay tất cả các há mật mã x¿p ba lô khác nhau đÁu đã
bị chāng tỏ là không bảo mật (ngo¿i trÿ há Chor-Rivest)
Hệ mật mã McEliece
McEliece là há mã hoá dąa trên lý thuy¿t vÁ ma trận sinh và không gian chiÁu vector gồm ba quá trình là t¿o khoá, mã hoá và giải mã Há mật mã McEliece dąa trên bài toán giải mã cho các mã tuy¿n tính (cũng là một bài toán NP đầy đÿ) và có ch°a thà thay th¿ đ°ÿc cho các há mã hoá công khai hián nay nh° RSA vì tính chất mã hoá chỉ dąa trên một vài vấn đÁ trong lý thuy¿t số
Trang 21 Hệ mật mã Elgamal
Há mật mã Elgamal là há mật mã khoá công khai do ông Taher Elgamal ng°ßi
Ai Cập đÁ xuất vào năm 1984 Đặc điÃm cÿa há mã hoá này là phā thuộc vào độ phāc t¿p cÿa bài toán logarit và là bi¿n thà s¡ đồ phân phối cÿa giao thāc trao đổi khoá Diffie-Hellman
Hệ mã hoá RSA
1.2.5
Trong phần này, chúng ta sẽ tìm hiÃu vÁ hệ mã hoá RSA - một há mã hoá đóng góp vai trò không hÁ nhỏ trong viác t¿o chă ký số ĐÃ nắm bắt, giải đ°ÿc bài toán RSA, chúng ta cần phải hiÃu bi¿t nhiÁu công thāc toán học, trong đó quan trọng nhất
là phải nắm văng các lý thuy¿t vÁ toán học sau đây
1.2.5.1 Định nghĩa số nguyên tố
Số nguyên tố là các số tą nhiên chỉ chia h¿t cho 1 và chính nó Hay nói cách khác, số nguyên tố là một số tą nhiên lớn h¡n 1, n¿u nh° ngoài bản thân nó và 1 ra, nó không chia h¿t cho số nào khác năa thì nó là số nguyên tố Có một l°u ý là số 0 và 1 không đ°ÿc coi là số nguyên tố
Chúng ta có một số ví dā vÁ số nguyên tố nh°: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,…
1.2.5.2 Định lý Euler
Định lý Euler là định lý c¡ bản trong các há thống mã hoá RSA, tuy nhiên đ°ÿc cho là không đÿ và không thật są cần thi¿t đối với viác kiÃm tra tính hÿp lá trong RSA Nội dung cÿa định lý nh° sau:
Cho p là một số nguyên tố:
(1) Định lý Euler: N¿u a ∈ Zn* thì þΦ(n) ≡ 1 (mod n)
(2) N¿u n là tích cÿa các số nguyên khác nhau và n¿u r ≡ s (mod Φ(n)) thì
þÿ ≡ þĀ(mod n) đối với mọi số nguyên a Nói một cách khác khi làm viác với modulo
n thì các số mũ có thà đ°ÿc rút gọn theo modulo Φ(n)
1.2.5.3 Định lý Euclid mở rộng
Định lý Euclid má rộng có nhiám vā giải ph°¡ng trình vô định nguyên có d¿ng
ax + by = c N¿u cho tr°ớc 2 số nguyên x, y thì tồn t¿i hai số nguyên a,b thoả
Trang 221.2.5.4 Mã hoá RSA - Rivest Shamir Adleman
RSA là một há mã hóa bất đối xāng mang đầy đÿ các tính chất, āng dāng cÿa
há mật mã này Cha đẻ cÿa há mã hoá RSA là Ron Rivest, Adi Shamir và Leonard Adleman (tên cÿa nó cũng chính là tên vi¿t tắt cÿa 3 tác giả này) và đ°ÿc āng dāng đặc biát vào công tác mã hoá thông tin và chă ký đián tā (chă ký số) Đây là há mã hoá đầu tiên phù hÿp trong viác t¿o chă ký số đồng thßi với viác mã hoá và đang sā dāng phổ bi¿n trong giao dịch đián tā, đ°ÿc cho là đảm bảo an toàn với điÁu kián độ dài khoá đÿ lớn RSA đ°ÿc xây dąng dąa trên độ khó cÿa bài toán phân tích thÿa số nguyên tố (bài toán RSA) và định lý Euclid má rộng Trong há mã hóa này, khoá công khai có thà chia sẻ công khai cho tất cả mọi ng°ßi, còn khoá bí mật sẽ đ°ÿc ng°ßi chÿ
sá hău giă kín, vì th¿ không ai khác có thà đọc đ°ÿc dă liáu đã đ°ÿc mã hoá tÿ khoá công khai trên ngo¿i trÿ dùng khoá bí mật đà giải mã Ho¿t động cÿa RSA dąa trên ba b°ớc chính: sinh khóa, mã hóa và giải mã
Trang 23Hình 8.9 Quy trình mã hoá RSA
Sinh khóa
Mấu chốt c¡ bản cÿa viác sinh khóa trong RSA là tìm đ°ÿc bộ 3 số tą nhiên e, d và n sao cho: ÿþý ≡ ÿ mod Ā và một điÃm không thà bỏ qua là cần bảo mật cho d sao cho dù bi¿t e, n hay thậm chí cả m cũng không thà tìm ra d đ°ÿc
Cā thÃ, khóa cÿa RSA đ°ÿc sinh nh° sau:
1) T¿o 2 số nguyên tố lớn ngẫu nhiên và khác nhau p và q, p và q có độ lớn
xấp xỉ nhau (số nguyên tố yêu cầu tối thiÃu 10 chă số đà đảm bảo tính bảo mật)
2) Tính n = p * q và Φ(n) = (p −1) * (q −1)
3) Chọn một số nguyên ngẫu nhiên e, 1 < e < Φ, sao cho ¯CLN(e, Φ) = 1 4) Sā dāng thuật toán Euclide má rộng đà tính một số nguyên d duy nhất, 1
< d < Φ thoả mãn e.d ≡ 1(mod Φ)
5) Khoá công khai là cặp số (n, e) Khoá riêng bí mật là d
Trong đó các số nguyên d và e trong thuật toán khoá RSA đ°ÿc gọi là số mũ mã hoá và số mũ giải mã Số n đ°ÿc gọi là số modulus Chúng ta cần giă private key thật cẩn thận cũng nh° các số nguyên tố p và q vì tÿ đó có thà tính toán các khóa rất dß dàng
Māc độ bảo mật cÿa RSA phā thuộc rất lớn vào khả năng phân tích thÿa số nguyên tố cÿa các số lớn Bái vì chúng ta cung cấp public một cách rộng rãi, n¿u viác phân tích thÿa số nguyên tố đ¡n giản, thì viác bị lộ private là không thà tránh khỏi
Vì vậy, khi sinh khóa, chúng ta cần chọn các số nguyên tố p và q một cách ngẫu nhiên Bản thân hai số nguyên tố này cũng rất lớn, và đà viác phân tích thÿa số nguyên
tố khó khăn h¡n, hai số nguyên tố này sẽ không có cùng độ dài Trong t°¡ng lai gần,
Trang 24có lẽ vẫn ch°a có một ph°¡ng pháp hiáu quả nào cho phép thąc hián điÁu này với các máy tính cá nhân
Ví d ụ 1.7:
Sau đây là một ví dā với nhăng số cā thà à đây chúng ta sā dāng nhăng số nhỏ
đà tián tính toán còn trong thąc t¿ phải dùng các số có giá trị đÿ lớn
Lấy:
p = 29: Số nguyên thā nhất (giă bí mật hoặc phải huỷ sau khi t¿o khoá)
q = 71: Số nguyên thā hai (giă bí mật hoặc phải huỷ sau khi t¿o khoá)
Tính n = p.q = 2059 và Φ(n) = (p −1)(q −1) = 1960
Chọn ngẫu nhiên e sao cho °ớc chung lớn nhất (e, Φ) = 1, ví dā lấy e = 3
Dąa vào định lý Euclid má rộng, Φ và khoá công khai e á trên, chúng ta tìm ra khoá bí mật d = 1307
Mã hóa và giải mã
Trong phần này, chúng ta sẽ tìm hiÃu cách mã hóa với public key (n, e) và giải
mã với private key (n, d)
Ví d ụ 1.8:
Bob muốn mã hoá và gāi thông báo m cho Alice
Bob cần thąc hián:
(1) Thu nhận khoá công khai (n, e) cÿa Alice
(2) BiÃu dißn bản tin d°ới d¿ng một số nguyên m trong khoảng [0 , n - 1]
(3) Tính c = ÿþ mod n
(4) Gāi bản mã c cho Alice
ĐÃ khôi phāc bản rõ m tÿ c, Alice phải thąc hián phép tính sau bằng cách dùng khoá riêng m = ýý mod n
Chāng minh ho¿t động giải mã:
Vì e.d = 1 (mod Φ) nên luôn tồn t¿i một số nguyên k sao cho
e.d = 1 + k Φ Bây giß n¿u (m, p) = 1 theo định lý Fermat ta có:
ÿý21 = 1 (mod p)
Lũy thÿa cả hai v¿ cÿa đồng d° thāc trên với số mũ k (q - 1) và rồi nhân cả hai v¿ với m ta có:
Trang 25ÿ1 + �㕘(þ21)(ý21) ≡ ÿ (ÿāþ Ă)
Mặt khác n¿u ¯CLN (m, p) = p thì đồng d° thāc cuối cùng á trên vẫn đúng vì mỗi v¿ đÁu đồng d° với 0 mod p Bái vậy, trong mọi tr°ßng hÿp ta đÁu có:
ÿþý ≡ ÿ (ÿāþ Ă)
Bằng lập luận t°¡ng tą ta l¿i có: ÿþý = m (mod p)
Cuối cùng vì p và q là các số nguyên tố khác nhau nên ÿþý = m (mod n) và bái
vậy ýý ≡ (ÿþ)ý ≡ ÿ (ÿāþ Ā)
Ví d ụ 1.9: T¿o khóa
Alice chọn các số nguyên tố p = 2357, q = 2551 và tính n = p.q = 6012707 và Φ = (p - 1)(q - 1)= 6007800
Alice chọn e = 3674911 và dùng thuật toán Euclide má rộng đà tìm đ°ÿc d =
422191 thỏa mãn ed = 1(mod Φ) Khóa công khai cÿa Alice là cặp số (n =
6012707, e = 3674911), khóa bí mật cÿa Alice là d = 422191
Đà mã hóa thông báo m = 5234673, Bob sā dāng thuật toán lấy lũy thÿa theo modulo đà tính c = ÿþ ÿāþ Ā = 5234673 3674911 mod 6012707 = 3650502 rồi gāi c cho Alice
ĐÃ giải mã bản mã c, Alice tính ýý mod n = 3650502422191 mod 6012707 = m
Cả hai phép tính trên đÁu có thà đ°ÿc thąc hián hiáu quả nhß giải thuật bình ph°¡ng và nhân Vấn đÁ cốt lõi cÿa há mã hoá RSA đó là viác chọn số nguyên tố p, q
đÿ lớn đà đảm bảo an toàn cho bản mã, n¿u đà kẻ thám mã mà bi¿t đ°ÿc số nguyên tố
p, q thì dß dàng tính đ°ÿc khoá bí mật d tÿ khoá công khai (e, n) do đó bản mã sẽ bị lộ, bái vì với są phát triÃn cÿa công nghá, các siêu máy tính xuất hián ngày càng nhiÁu Cùng với chúng ta máy tính l°ÿng tā cho phép tính toán với tốc độ cao h¡n rất nhiÁu
có thà sẽ phá vỡ są bảo mật cÿa RSA