Mật mã là một lĩnh vực khoa học chuyên nghiên cứu về các phương pháp và kỹ thuật đảm bảo an toàn và bảo mật trong truyền tin liên lạc với giả thiết sự tồn tại của các thế lực thù địch, n
Trang 1
TRƯỜNG ĐẠI HỌC HỎNG ĐỨC
KHOA CNTT&TT Lớp: K24A - ĐH CNTT
1 Lê Việt Quang
Trang 2Mục Lục Mục Lục
Lời Nĩi Đầu
Chương I: GIỚI THIỆU LÝ THUYẾT MAT MA
1 Khái Niệm Về Lý Thuyết Mật Mã se 5c sccscseecsersereessrsseserserse
2 Mật Mã Học - Một Số Thuật Ngữ Cơ Bản Trong Cryptography
3 Mục Tiêu Của Mật Mã Học Là Gì ? ng ng ng ng
4, Cac Loai encryption (ma hoa)
4.1 Symmetric Encryption (ma hoa đối XỨTĐ) Quà hp 4,2, Asymmetric Encryption (ma hoa bắt đối bì: An" anh 4.3 Cryptographic hash function (Ham bam mật mã học) -
5 Một Số Lưu Ý Khi Ứng Dụng Crypfographiyy ác ác HH Y ve Š.l, CrypfoØraph HT ng KH 1 008 8 0 00 8 08 5.2 Hash function
6 Kết Luận Về Mật Mã Học s5 5-5 sccesEsetseExstseEEsEssererersrrerrrrerre Chương II : MƠ HÌNH CÁC HỆ MÃ HĨA CƠ BẢN VÀ HỆ MÃ HĨA RSA Âm.) hố ẽ
2 Nguyên Lý Hoạt Động Của Mã Hĩa Cơ Bản Và Hệ Mã Hĩa RSA
3 Các Thành Phần Chính Của Hệ Thống
4 Ưu Điểm Và Nhược Điển - o5 se rsExsExeEEsEEsersErsersrrsersrrereereree
Trang 35 Ứng Dụng Của Các Hệ Mã
8 ‹(c ai na o-:
7 Tài Liệu Tham Khảo
§ Giới Thiệu Mã Nguồn Băng Ngôn Ngữ C# -cscsoeceeeeeerrsrerreree 8.1 Hệ Mã Chuyển Dich (caesar)
8.2 Hé MA Thay Thé ( substitution) .ccccscccssscsessssssssssssesscssssssscscsssstssescssseceseans
Trang 4Lời Nói Đầu Trong mọi thời đại xã hội loài người, van dé bao mat thông tin luôn được quan tâm lớn Từ xa xưa, con người đã sáng tạo ra các hệ mật mã cô điển đề đáp ứng nhu cầu bảo mật thông tin Mật mã học là một ngành có lịch sử từ hàng nghìn năm nay Trong phần
lớn thời gian phát triển của mình (ngoại trừ vài thập kỷ trở lại đây), lịch sử mật mã
học chính là lịch sử của những phương pháp mật mã cô điền - các phương pháp mật mã hóa với bút và giấy, đôi khi có hỗ trợ từ những dụng cụ cơ khí đơn giản
Vào đầu thế ký 20, sự xuất hiện của các cơ cầu cơ khí và điện cơ, chăng hạn như máy Enigma, đã cung cấp những cơ chế phức tạp và hiệu quả hơn cho việc mật mã hóa Sự ra đời và phát triển mạnh mẽ của ngành điện tử và máy tính trong nhimg thap ky gan day da tạo điều kiện để mật mã học phát triển nhảy vọt lên một tầm cao mới Rất nhiều hệ mật
mã hiện đại đã lần lượt ra đời dựa trên cơ sở đại số Modulo và các thuật toán logarithm roirac Nam 1975, IBM công bố Hệ mật DES, khởi đầu cho các hệ mật mã hiện dai
Tiếp theo do la sy ra doi cla cac hé mat mé AES, RSA, DSA, Elgamal Hé mat Elgamal được đề xuất vào năm 1984 trên cơ sở của bài toàn Logarit roi rac, la mot hé mat
Trang 5Chương I: GIỚI THIỆU LÝ THUYẾT MẬT MÃ
1 Khái niệm về lý thuyết mật mã
Mật mã là một lĩnh vực khoa học chuyên nghiên cứu về các phương pháp và kỹ thuật đảm bảo an toàn và bảo mật trong truyền tin liên lạc với giả thiết sự tồn tại của các thế lực thù địch, những kẻ muốn ăn cắp thông tin đề lợi dụng và phá hoại Tên gọi trong tiếng Anh, Cryptology được dẫn giải nguồn gốc từ tiếng Hy lạp, trong đó kryptos nghĩa là
“che đấu”, logos nghĩa là “từ ngữ”
Cụ thê hơn, các nhà nghiên cửu lĩnh vực này quan tâm xây dựng hoặc phân tích (để chỉ ra điểm yếu) các giao thức mật mã (cryptographic protocols), tức là các phương thức giao địch có đảm bảo mục tiêu an toàn cho các bên tham gia (với giả thiết môi trường có
Trang 6một thê thông nhất là ngành khoa học mật mã (cryptology) Tuy nhiên, do lĩnh vực thứ hai (cryptanalysis) it được phô biến quảng đại nén dan dan, cach hiệu chung hiện 2 nay là đánh đồng hai thuật ngữ cryptography và cryptology Theo thói quen chung này, hai thuật ngữ này có thê dùng thay thế nhau Thậm chí cryptography là thuật ngữ ưa dùng, phô biến trong mọi sách vở phô biến khoa học, còn cryptology thì xuất hiện trong một phạm
vi hẹp của các nhà nghiên cứu học thuật thuần túy
Mặc dù trước đây hầu như mật mã và ứng dụng của nó chỉ phố biến trong giới hẹp, nhưng với sự phát triển vũ bão của công nghệ thông tin và đặc biệt là sự phô biến của
mạng Internet, các giao dịch có sử dụng mật mã đã trở nên rất pho biến Chăng hạn, ví dụ
điển hình là các giao dịch ngân hàng trực tuyến hầu hết đều được thực hiện qua mật mã Ngày nay, kiến thức ngành mật mã là cần thiết cho các cơ quan chính phủ, các khối doanh nghiệp và cả cho cá nhân Một cách khái quát, ta có thê thấy mật mã có các ứng
dụng như sau:
¢ Với các chính phủ: bảo vệ truyền tin mật trong quân sự và ngoại giao, bảo vệ
thông tin các lĩnh vực tầm cỡ lợi ích quốc gia
¢ Trong cac hoat déng kinh tế: bảo vệ các thông tin nhạy cảm trong giao dịch như
hồ sơ pháp lý hay y tế, các giao dịch tài chính hay các đánh giá tin dung
© - Với các cá nhân: bảo vệ các thông tin nhạy cảm, riêng tư trong liên lạc với thé giới qua các giao dịch sử dụng máy tính và/hoặc kết nối mạng
2 Mật Mã Học - Một Số Thuật Ngữ Cơ Bản Trong Cryptography
Một số thuật ngữ cơ bản của Cryptography bao gồm:
Trang 7Plaintext (Bản rõ): là thông tin ban đầu chưa được che giấu Nó có thê ở đạng văn
bản, hình anh, video hoặc bất kỳ định dạng khác Plaintext có thê đễ dàng đọc và hiểu bởi
bat ky ai có quyền truy cập vào nó nên nó cần được che dầu va bảo vệ
Ciphertext (Bản mã): Là kết quả của quá trình mã hoá plaintext, là dạng đữ liệu đã được che giấu Ciphertext là vô nghĩa với các bên khác, ngoại trừ các bên trao đôi thông tin với nhau
Key (Khoá): Còn gọi là cryptographic key (khoá mật mã), là một mâu thông tin đưới dạng chuỗi số hoặc chữ cái, được sử dụng trong quá trình mã hoá và giải mã Key là thành phần tối quan trọng, cần được giữ kín Nếu key bị lộ, bat kỳ ai có được key cũng có
thể biết được nội dung của plaintext
Cipher: Là thuật toán dùng để má hoá và giải mã đữ liệu
Decipher (Phá mã): Là thuật toán đùng đề tân công vào ciphertext với mục tiêu tiếp cận đến plaintext mà không cân tới key
Encryption: La qua trinh mã hoá thông tin từ plaimtext thành ciphertext sử dung cipher
Về cơ bản, mục tiêu chính của cryptography bao gồm:
Confidentiality (Tinh bao mat): Chi co cac bén liên quan trong quá trình trao đổi, chủ
sở hữu hoặc người có thâm quyên mới có quyền truy cập vào các thông tin liên quan Integrity (Tính toàn vẹn): Dữ liệu trong quá trình lưu trữ và trao đôi không được thay
đôi hoặc bị mật
Trang 8Authentication (Tính xác thực): Người nhận phải biết được thông điệp mà họ nhận
được đến từ aI, và xác thực được danh tính người gửi
Non-repudiation (Tính chống chối bỏ): Người gửi không thể chối bỏ được thông điệp
mà họ đã gửi Người gửi sẽ phải chịu toàn bộ trách nhiệm với thông tin mà họ đã gửi
Chúng ta có nhiều loại mã hoá, mỗi loại có mục tiêu khác nhau nên không phải bat cur loại mã hoá nào cũng có thể đảm bảo được toàn bộ cả bốn tính chất trên Cho nên, chúng
ta thường sử dụng kết hợp các loại mã hoá khác nhau nhằm đưa hệ thông đạt ngưỡng an toàn tốt nhất Ví dụ, mã hoá bất đối xứng được sử dụng trong quá trình trao đối secret key của mã hoá đối xứng
4, Cac Loai encryption (ma hoa) -
4.1 Symmetric Encryptfion (mã hoá đôi xứng)
có một cách đề chia sẻ và thông nhất khoá an toản
Một số ứng dụng của mã hoá đối xứng bao gồm:
Trang 9© - Che giấu dữ liệu: mã hoá đối xứng được dùng đề che giấu các thông tin nhạy cảm,
vi dụ nhu email, file
¢ Chia sẻ tap tin: mã hoá đối xứng sử dụng như một cách che giấu thông tin an toàn khi chỉa sẻ trên mạng máy tính
Ưu điểm lớn nhất của mã hoá đôi xứng là tốc độ Mã hoá đối xứng có tốc độ mã hoá
và giải mã tốt hơn rất nhiều so với mã hoá bắt đối xứng, nên nó thường được sử đụng đề
mã hoá file
Nhược điểm lớn nhất của mã hoá đối xứng là cách chia sẻ key Hai bên cần thống nhất sử dụng chung một key duy nhất một cách an toàn, điều này có thê gây ra một số rủi
ro và có một số khó khăn nhất định
Một số loại mã hoá đối xứng phố biến hiện nay bao gồm :
® - Data Encryption Standard (DES): DES là một mật mã khối sử dụng khóa 56 bit
Nó được phát hành lần đầu tiên vào năm 1977 và hiện không còn được col là an
toàn vì bị phá vỡ bởi thuật toán vét cạn (cxhautive search), mà lý do khoá tương
đối ngắn (56 bit) Hiện nay đã bị thay thế bằng AES
¢ Triple DES (3DES): 3DES 1a mét biến thể của DES sử dụng ba khóa 3DES có độ
dai khoa 112 bit hoặc 168 bit, do đó, nó an toàn hơn DES Nó an toàn hơn DES
nhưng cũng chậm hơn Nhỉn chung, 3DES là một thuật toán mã hóa an toàn và hiệu quả, nhưng nó không còn được coi là lựa chọn tốt nhất cho các ứng dụng bảo mật hiện đại
e Advanced Encryption Standard (AES): AES la mét mat ma khéi sir dụng khóa 128
bit, 192 bit hodc 256 bit, được coi là thuật toán mã hoá đối xứng an toàn nhất hiện
có Nó được phát trién béi National Institute of Standards and Technology (NIST),
và được sử dụng phô biến trên toàn thế giới hiện nay
4.2 Asymmetric Encryption (ma hoa bắt đối xứng)
Asymmetric Encryption, hay c6 tén khac la public-key encryption (mã hoá công khan)
là một loại kỹ thuật mã hoá sử dụng 2 key cho ca quá trình mã hoá và giải mã
Trang 10Hai key này đi thành cặp, bao gồm private key và public key Private key sẽ được giữ
bí mật, dùng đề giải mã dữ liệu Public key sẽ được chia sẻ với tat cả mọi người, dùng để
dùng đê mã hoá dữ liệu
'Tuỳ thuộc vào cách sử dụng key, ta có hai chức năng chính như sau:
® - Khi muốn trao đổi thông tin an toàn, sender sẽ sử dụng public key của receiver đề encrypt thong tin và gửi đi Sau do, receiver sé lay private key cua minh dé decrypt thông tin, khi đó, thông tin đã được trao đổi thành công và an toàn
Trang 11© _ Trường hợp ngược lại sử dụng secret key dé encrypt va public key dé decrypt, ta gọi nó là ky s6 (sign), và thông điệp sau khi bi sign goi la chit ky s6 (digital signature) được đính kèm vào văn bản công khai mà bên gửi đã gửi cho các bên liên quan
Ý nghĩa chính của digital signature là chỉ có người sở hữu secret key mới có thé sign được signature trên văn bản công khai, do đó, danh tinh của sender được đảm bao
Trang 12\ z / Hello Alice K ——{ b Ver ——— t ae e \ ;
Ưu điểm lớn nhất của mã hoá bất đối xứng là cách thức trao đôi khoá rất an toàn Hai bên chỉ cần gửi public key cho nhau đề trao đổi mà không cân lo ngại về cách thức trao đôi khoá Public key dù có bị các bên khác lấy được cũng không thé str dung
Nhược điểm chính của mã hoá bắt đối xứng là tốc độ Mã hoá bất đối xứng chạy chậm nên chỉ phù hợp mã hoá các thông tin có kích thước nhỏ và không phù hợp để sử
dụng trên các văn bản lớn
Một số mã hoá bắt đối xứng phố biến hiện nay:
¢ RSA: RSA là từ viết tắt của Rivest-Shamir-Adleman, tên của ba nhà khoa học
máy tính đã phát triển nó vào năm 1978 RSA dựa trên độ khó của việc phân tích
12
Trang 13các số nguyên tổ lớn Mặc dù có tuổi đời rất lâu, RSA vẫn được coi là một trong
những thuật toán mã hoá tốt nhất hiện nay
e© - ElGamal: ElGamal là một thuật toán mã hóa bất đối xứng được phát triển bởi Taher Elgamal vào năm 1985 Nó dựa trên bài toán logarit rời rạc, một bài toán
toán học phức tạp vẫn chưa có giải pháp hiệu quả ElGamail được coi là an toàn
như RSA, nhưng có hiệu suất tốt hơn
e Diffie-Hellman: Diffie-Hellman la một thuật toán chia sẻ bí mật được phát triển
boi Whitfield Diffie va Martin Hellman vao năm 1976 Nó được sử dụng dé tao ra một khóa chung giữa hai bên mà không cân chia sẻ khóa đó trước đây Giống với
ElGamal, Difiie-Hellman là một thuật toán an toàn dựa trên bài toán logarit rời
rạc
4.3 Cryptographic hash function (Hàm băm mật mã học)
Hash function (ham băm) là một hàm toán học cho phép chuyên một chuỗi ký tự có
độ dài bất kỳ thành một chuỗi có độ dài có định
Cryptographic hash function (hàm băm băm mật mã học) là một hàm băm nhưng
có thê một số tính chất phù hợp hơn với mật mã học
Trong nhiều tài liệu, các tác giả cũng rút gọn crytographic hash function thành hash function Bài viết này cũng sẽ rút gọn khái niệm trên thành hash function đề tránh xung đột
Chuỗi sau khi biến đôi gọi là hashed value (giá trị băm) Vì tính chất đặc thù này,
chúng ta sẽ chỉ có một số lượng hữu hạn các hashed value và có thể xảy ra hiện tượng hai input trùng một hashed value
Cac dac tinh ctia hash function bao gom :
® - Uniformity (Tính đồng nhất): Một hashing function tốt cho phép mọi giá trị băm được tạo ra có xác suất giống nhau Ngoài ra, uniformity còn có thê tính toán và
đo lường được thông qua Chi-squared test
Trang 14Efficiency (Tính hiệu quả): Hashing function nên dễ tính toán, tốc độ xử lý một chuỗi đầu vào cần có thời gian phù hợp
Determinism (Tính xác định): Luôn trả về một kết quả nếu input không đổi Non-reversibility (Tính một chiều): Sẽ rất khó có thê đáo ngược từ hashed value sang input
Weak collision resistance (Tinh khang va cham yéu): Gia str co gia tri input x, kho
có thé tim ra mét y |= x voi H(y) = H(x)
Strong collision resistance (Tinh khang va cham manh): Kho co thé tim được một cap x, y bat ky sao cho H(x) = H(y)
Mot số ung dung cua hash function bao gồm:
Verifying the integrity (Dam bao tinh toàn ven đữ liệu): Người ta thường sử dụng một mã hashed khi gửi kèm với đữ liệu gốc đề đảm bảo rằng thông tin của sender toàn vẹn trong quá trình trao đôi
Signature generation and verification (Tao, xac minh chit ky): Khi str dung signature, ngudi ta khong str dung toan bộ thông tin để ký mà chỉ sử dung hashed value cua thong tin do
Password verification (Chứng thực mật khẩu): Mật khẩu trong cơ sở đữ liệu sẽ không bao giờ được lưu trữ ở plamtext, mà buộc phải thông qua cac hashing function đề lưu trữ
Một số hash function phố biến bao gồm:
MD5: MD5 được Ronald Rivest thiết kế vào năm 1991 dé thay thế hàm băm MD4 trước đó Nó tạo ra hashed value có 128 bít Hiện đã bị phá nên không còn được
ưu tiên sử dụng
SHA0: Là phiên ban đầu tiên của nhóm thuật toán SHA, được công khai năm
1991 Tuy nhiên sau đó bị rút lại do một lỗi bảo mật nghiêm trọng không được
công bó, và được thay thế bằng SHAI
Trang 15¢ SHAI: Duoc thiét ké boi United States National Security Agency, SHA1 co thé
tao ra hashed value cé 160 bit Diém yếu của SHAI đã được công bé, vi thé, sau năm 2010 đã ít được sử dụng, các tiêu chuẩn cũng loại bỏ SHAI
e - SHA2: Là phiên bản nâng cấp của SHAI SHA2 có thê tạo ra nhiều giá trị đầu ra, bao gồm: SHA2-224, SHA2-256, SHA2-384, SHA2-512, SHA2-512/224, SHA2- 512/256 SHA2 vẫn còn sử dụng tốt cho đến ngày hôm nay
s SHA3: Là phiên bản tốt nhất của nhóm thuật toán SHA Mặc dù cùng nhóm với SHA, tuy nhiên cấu trúc bên trông SHA3 rất khác so với các thuật toán mã hoá trước đó, nó có phan giéng voi MDS
Giống SHA2, SHA3 cũng cung cấp nhiều giá trị đầu vào, bao gồm: SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHA3-512/224, va SHA3-512/256
¢ SHAKE: Mot bién thé cha SHA-3, SHAKE cho phép tao ra cac ham bam có độ dài đầu ra tùy ý SHAKE có hai biến thể: SHAKE-128 va SHAKE-256, cho phép
tạo ra các hàm băm có độ dài đầu ra là 128 bit và 256 bit tương ứng
® cSHAKE: Một biến thê của SHAKE cho phép thêm một số tùy chọn tùy chỉnh,
chăng hạn như độ dài của đầu ra, giá trị nonce và số vòng lặp cSŠHAKE cũng là một biến thể của SHA3
® TupleHash: Một hàm băm mật mã được thiết kế để băm các mảng của các chuỗi TupleHash là một phiên bản khác của SHA3
Cac hash function SHAKE, cSHAKE va TupleHash déu dure phat trién boi NIST (National Institute of Standards and Technology) va déu duoc m6 ta trong FIPS 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
5 Mot Số Lưu Ý Khi Ứng Dung Cryptography
5.1 Cryptography
Cryptography gan nhu khéng co diém yéu nao néu str dung ding cach Nhung
trong qua trinh str dung, ching ta co thé mac một số lỗi cơ bản sau:
Trang 16® Sử dụng key quá yếu: Việc sử đụng một key quá yếu sẽ tạo điều kiện cho attacker có thê đoán, thậm trí địch ngược được thông tin đã được encrypt
¢ - Sử dụng cryptography đã lỗi thời: Tránh việc sử dụng các cryptography đã cũ
vi chúng không còn đủ khả năng bảo vệ
¢ Bao quan secret key kém: Viéc dé 16, lam mat secret key la việc tôi ky Cần có cac chinh sach bao quan cac secret key that tot
¢ Khong cap nhat key: Mot secret key chi đủ dé bảo vệ thông tin trong một khoảng thời gian nhất định, do đó chúng ta cần thay thế các key cũ trong quá trình trao đổi thông tin
5.2 Hash function
Cũng giống như cryptography, hash function gần như không có điểm yếu nếu
sử dụng đúng cách Tuy nhiên, ta cần lưu ý một số trường hợp cụ thé sau:
® Sử dung hashed value để lưu trữ mật khẩu: Dù không thé bi dich ngược, nhưng attacker van co thé tan céng bang ky thuat dictionary attack, thậm trí brute-force attack nhằm tiếp cận password
® - Sử dung hashed value lam ID: Việc định danh dữ liệu bằng hashed value tiềm ân rủi ro xung đột (collision) vì hai đữ liệu trùng mot hashed value la hoàn toàn có
thê xảy ra Chúng ta có thê cải thiện hiệu suất tìm kiếm bằng hashed value,
nhưng không nên sử dụng nó như một định danh
6 Kết Luận Về Mật Mã Học
Các hàm mã hoá rất mạnh mẽ, dễ sử dụng và đáng tin cậy Nếu sử dụng đúng cách, hệ thông của chúng ta sẽ có một lớp phòng thủ vững chắc, hoàn toàn có thể
chống lại sự xâm phạm của kẻ tấn công
Tuy nhiên, nếu sử dụng không đúng chuẩn, sai cách sử dụng sẽ đề lại lỗ hồng bảo mật cực lớn đến hệ thong, dữ liệu, thậm trí máy chủ của chúng ta đều có thê bị đánh
cắp, chiếm đoạt hoặc phá hoại
Ngoài ra, chúng ta cần thường xuyên cập nhật các phần mềm, tránh trường hợp các giao thức, thậm trí các hàm mã hoá mà chúng ta sử dụng không còn hiệu quả
Trang 17Trong chiến tranh thê giới thứ hai, cỗ máy Enigma được coi là bất khả chiến bại thời bấy giờ, đã bị cỗ máy Bombe do Alan Turing phát minh giải mã thành công, giúp một phần không nhỏ cho quân Đồng Minh chiến thắng Phát xít Đức
và duoc tin dung
Trang 18Chương II : MÔ HÌNH CÁC HỆ MÃ HÓA CƠ BẢN VÀ HỆ MÃ RSA
1 Giới Thiệu
Trong thé ký 21, việc bảo vệ thông tin trở thành một van dé cap bach, dac
biệt là khi dữ liệu truyền qua các kênh công cộng như internet Các hệ mã hóa dong vai tro quan trọng trong việc bảo vệ thông tin khỏi sự truy cập trái phép Dựa trên những kiến thức tìm hiểu được về , nhóm em sẽ triển khai bốn hệ mã
hóa pho bién: Vigeneére, hé ma thay thế, hệ mã hoán vị và hệ mã dịch chuyên và
mô phỏng các hệ mat ma trén nén tang cua phan mem Visual
Giao dién m6 phong :
Permutation Cipher Vigenére cipher Substitution Cipher Alphabet
~ Key: 0 $
Enter plain text
Enter cipher text
Trang 192.1 Vigenere
Hệ mã hóa Vigenere Là một phương pháp mã hóa cô điển sử dụng một bảng chữ cái dạng lưới và một từ khóa để mã hóa thông điệp Quá trình mã hóa diễn ra bằng cách di chuyền từ khóa theo từng ký tự trong thông điệp và thực hiện các phép toán mod đề tạo ra văn bán mã hóa
2.2 Hệ Mã Thay Thế
Trong hệ mã thay thế, mỗi ký tự trong thông điệp được thay thê bằng một
ký tự khác dựa trên một quy tắc xác định Quy tắc này thường được biéu dién thông qua một bảng ánh xạ, thay đổi từng ký tự thành một ký tự tương ứng 2.3 Hệ Mã Hoán Vị
Trong hệ mã hoán vi, cac ky ty trong thông điệp được hoán đổi vị trí theo một quy tắc cụ thể, thường dựa trên một khóa hoán vị Quá trình này tạo ra một
văn bản mã hóa mà không thay đôi các ký tự mà chỉ hoán đổi vị trí của chúng
2.4 Hệ Mã Dịch Chuyển
Hệ mã dịch chuyên là một phương pháp mã hóa dựa trên việc dịch chuyển
các ký tự của thông điệp theo một số bước cô định Các bước địch chuyển này
có thê được thực hiện theo chiều ngang, chiều dọc hoặc theo các hướng khác nhau
3 Các Thành Phần Chính Của Hệ Thống
Mỗi hệ mã hóa có các thành phần chính như khóa, quy tắc mã hóa và quy tắc giải mã Khóa định nghĩa cách thức ánh xạ thông điệp gốc thành thông điệp mã hóa và ngược lại Quy tắc mã hóa và giải mã là quy trình cụ thê đề thực hiện việc chuyển đổi thông
điệp
Trang 204 Ưu Điểm Và Nhược Điểm
Mỗi hệ mã hóa có ưu điểm và nhược điểm riêng Ví dụ, Vigenére có thể bảo mật tốt
nếu khóa đủ đài, nhưng dễ bi phá vỡ nếu khóa quá ngắn Hệ mã thay thế có thể đễ dàng bị phá vỡ bằng phương pháp phân tích tần suất, trong khi hệ mã hoán vị có thê
bảo mật tốt hơn đối với các thông điệp dài
5 Ứng Dụng Của Các Hệ Mật Mã
Các hệ mã hóa đã được áp dụng rộng rãi trong nhiều lĩnh vực như truyền thông an
toàn, bảo mật đữ liệu và mã hóa tin nhắn trong các ứng dụng di động và web
6 Kết Luận
Các hệ mã hóa là công cụ quan trọng trong bảo mật thông tin, đóng vai trò quan trọng trong việc báo vệ dữ liệu quan trọng khỏi sự truy cập trái phép Tuy nhiên, việc
chọn lựa và triển khai hệ mã hóa phù hợp là rất quan trọng đề đảm bảo tính bảo mật
và hiệu suất của hệ thống
7 Tài Liệu Tham Khảo
8 Giới thiệu mã nguồn bằng ngôn ngữ C#
8.1 Hệ mã chuyển dich (caesar)
public string shiftCipher(int key, string input)
{
Trang 21//Lay ra chudi alphabet
string alphabet = "ABCDEFGHIJKLMNOPORSTUVWXYZ";
//Lay d6 dai cia chudi
int alphabetLength = alphabet.Length;
//Khởi tạo chuỗi kết quả cho việc mã hóa và dung LinQ dé lặp qua từng phần tử trong chuỗi input
string result = new String(input.Select(c =>
{
/IKiểm tra c là ký tự hay chữ số
if (char.IsLetterOrDigit(c))
{
//Kiém tra xem néu c là chữ in hoa thi gan base char 14 A ngugc lai
char baseChar = char.IsUpper(c) ? 'A': 'a';
Ep kiểu về char , khi này các kí tự sẽ là giá trị trơng đương trên bang ASCII
//Ap dung thuat toan dich chuyén shift cipher
return (char)((c + key - baseChar + alphabetLength) %
Trang 22Hệ mã Caesar
Hàm shift cipher bạn cung cấp sử dụng thuật toán mã hóa Caesar, _còn được gọi là
mã dịch chuyền Thuật toán này là một hệ mã đơn giản thay thế mỗi ký tự trong văn bản bằng một ký tự khác cách nó một số vị trí nhất định trong bảng chữ cái
Duyệt qua từng ký tự c trong văn bản
Kiểm tra c là chữ cái hay chữ só
Nếu là chữ cái hoặc chữ số:
Xác định ký tự cơ bản Basechar dựa trên việc c là chữ hoa hay chữ thường (A cho chữ hoa,
a cho chữ thường)
Chuyển đổi c sang giá tri ASCII
Áp dụng công thức (c + key - baseChaz + aiphabeLtrength) $ alphabetLength + baseChar dé tinh toan vị trí mới của ký fự sau khi dịch chuyên
Chuyển đổi giá tri ASCII mới sang ký tự tương ứng
Nếu không phải chữ cái hoặc chữ số: Giữ nguyên ký tự c
Kết hợp kết quả: Ghép các ký tự đã mã hóa hoặc giữ nguyên để tạo thành chuỗi kết quả
Hạn chế:
Thuật toán Caesar khá đơn giản và dễ bị giải mã
Phương pháp này không thay đổi tần suất xuất hiện của các ký tự trong văn bản, dẫn đến việc dễ dàng đoán được nội dung
Ứng dụng:
Hệ mã Caesar thường được sử dụng trong các trò chơi giải trí, giáo dục hoặc các
trường hợp cân bảo mật thông tin đơn giản
8.2 Hệ mã thay thế ( substitution)
public string EncryptSubstitution(string text, int key)
Trang 23foreach (char c in text ToUpper())
{
if (char.IsLetter(c))
{
int index =c -'A';
index = (index + key) % 26;
encryptedText += (char)('A’ + index);
Trang 24index = (index - key + 26) % 26;
decryptedText += (char)('A' + index);
else
decryptedText += c;
}
return decryptedText;
Cách thức hoạt động của hệ thống mã hóa thay thế đơn giản:
1 Chuyển đổi văn bản:
Toàn bộ văn bản được chuyền đổi thành chữ hoa để đảm bảo tính nhất quán trong quá trình
mã hóa
2 Mã hóa từng ký tự:
Duyệt qua từng ký tự c trong văn bản
Kiểm tra œ là chữ cái hay không
Nếu là chữ cái:
Xác định vị trí của c trong bảng chữ cái (ví dụ: 'A' là vị trí 0, 'B' là vị trí 1, Vv.V.)
Trang 25ma key va lay theo modulo 26 ((index + key) % 26)
Lấy ký tự tại vị trí mới trong bảng chữ cái
Nếu không phải chữ cái:
Bảo mật thông tin:
Mã hóa email: Hệ mã thay thế có thể được sử dụng để mã hóa email, đảm bảo chỉ người nhận
có khóa giải mã mới có thê đọc được nội dung
Bảo vệ dữ liệu cá nhân: Hệ mã thay thế có thể được sử dụng để mã hóa dữ liệu cá nhân như
tên, địa chỉ, sô điện thoại, v.v., giúp bảo vệ thông tin khỏi bị đánh cắp
Lưu trữ mật khẩu: Hệ mã thay thế có thể được sử dụng đề lưu trữ mật khẩu một cách an
toàn, giúp giảm nguy cơ bị hacker tân công
Xác thực danh tính:
Chữ ký điện tử: Hệ mã thay thế có thể được sử dụng để tạo chữ ký điện tử, giúp xác thực
danh tính của người gửi email hoặc tài liệu điện tử
Xác thực người dùng: Hệ mã thay thế có thể được sử dụng để xác thực người dùng trong các hệ thống đăng nhập, giúp đảm bảo chỉ người dùng hợp lệ mới có thể truy cập hệ thống
Giáo dục và giải trí:
Trò chơi giải đố: Hệ mã thay thế thường được sử dụng trong các trò chơi giải đố, giúp tăng tính thử thách và thú vị cho trò chơi
Dạy học: Hệ mã thay thế có thể được sử dụng đề dạy học sinh về các khái niệm mã hóa và
bảo mật thông tin
Ngoài ra, hệ mã thay thế còn có thể được ứng dụng trong nhiều lĩnh vực khác như
quân sự, ngoại giao, y tê, v.v
Ưu điểm của hệ mã thay thế:
Trang 26Dễ dàng triển khai: Hệ mã thay thế có thể được triển khai dễ dàng với các công cụ và kiến
thức cơ bản
Hiệu quả: Hệ mã thay thế có thể cung cắp mức độ bảo mật cao cho thông tin
Linh hoạt: Hệ mã thay thế có thể được sử dụng cho nhiều mục đích khác nhau
Nhược điểm của hệ mã thay thế:
Khả năng bảo mật: Hệ mã thay thế có thể bị phá vỡ nếu kẻ tấn công có đủ thời gian và nguồn
Trang 27{
int plainCharindex = c - ‘A’;
int keyCharlndex = key[keylndex] - 'A';
int encryptedCharlndex = (plainCharlndex + keyCharlndex) % 26;
char encryptedChar = (char)(A' + encryptedCharlndex); encryptedText += encryptedChar;
Trang 28key = key ToUpper();
int cipherCharIndex = c - ‘A’;
int keyCharlndex = key[keylndex] - 'A';
int decryptedCharlndex = (cipherCharlndex - keyCharlndex) % 26; char decryptedChar = (char)(A' + decryptedCharlndex);
Trang 29}
EncryptVigenere() la ham ma hóa hệ mật mã vigenere
DecryptVigenere() la ham giai ma hé mat ma vigenere
Giải thích mã hóa Vigenère:
Mã Vigenère bạn cung cấp thực hiện mã hóa và giải mã văn bản bằng phương pháp
mã hóa thay thế đa chữ cái Thay vì sử dụng một khóa duy nhất như mã Caesar, Vigenére sử dụng một chuôồi khóa lặp lại đê mã hóa từng ký tự trong văn bản
Hàm EncryptVigenere:
Tham số:
plainText: Văn bản cần mã hóa (kiểu s+z: no)
xey: Khóa mã hóa (kiểu s+ +: nọ)
Hoạt động:
1 Khởi tạo biến eaczyptedTrext để lưu trữ văn bản đã mã hóa (kiểu s+ +: nọ)
2 Chuyển đổi cả văn bản o' 2 ¡ "rext: và khóa ‹ey thành chữ hoa
3 Khởi tạo biến keyIndex để theo dõi vị trí trong khóa
4 Duyệt qua từng ký tự c trong p1ainText
Nếu là chữ cái:
Tính toán chỉ số ký tự trong bảng chữ cái (c1 2: schazTne+x) và chỉ số khóa tương ứng
(keyCharTndex)
Tính toán chỉ số ký tự mã hóa mới (e:cryptedCha+zTndex) bằng cách
c6ng plainCharIndex Va keyCharIndex theo modulo 26
Chuyén déi encryptedcharIndex thanh ky ty chi? cai twong tng va thém vao encryptedText TAng keyIndex va đặt lại về 0 nếu vượt quá độ dài khóa
Nếu không phải chữ cái:
Giữ nguyên ký tự c và thêm vào encrypcedText
5 Trả về encrzyoredText chứa văn bản đã mã hóa
Hàm DecryptVigenere:
Trang 30Tham số:
cipherText: Van ban d& ma héa (kiéu string)
key: Khéa ma hoa (kiéu st ring)
Hoạt động:sz
1 Khởi tạo biến decryptedTrex: để lưu trữ văn bản đã giải mã (kiểu s+ + nọ)
2 Chuyển đổi cả văn bản c¡ ohezText+ và khóa xey thành chữ hoa
3 Khởi tạo biến keyIndex để theo dõi vị trí trong khóa
4 Duyệt qua từng ký tw c trong cipherText
Nếu là chữ cái:
Tính toán chỉ số ký tự trong bảng chữ cái (c¡ phezCharTndex) và chỉ số khóa tương ứng
(keyCharTndex)
Tính toán chỉ số ký tự giải mã mới (dscryptedCharTndex) bằng cách
try keyCharIndex tlv cipherCharIndex theo modulo 26
Chuyén déi decryptedcharIndex thanh ky tu chi cai twong ứng và thêm vào decryptedText TAng keyIndex va đặt lại về 0 nếu vượt quá độ dài khóa
Nếu không phải chữ cái:
Giữ nguyên ký tự c va thém vao decryptedText
5 Trả về decrypredText chứa văn bản đã giải mã
8.4 Hé Hoan vi (permutation)
public string permutationCipher(string plaintext, string key)
{
int blockSize = key.Length;
int blockCount = (int)Math.Ceiling((double)plaintext.Length / blockSize);
char[,] matrix = new char[blockCount, blockSize];
int plaintextIndex = 0;
Trang 31int[] order = GetOrder(key);
char[,] sortedMatrix = new char[blockCount, blockSize];
for (int i = 0; i < blockCount; i++)
{
for (int j = 0; j < blockSize; j++)
{
Trang 32//LAy ra thứ tự của các phần tử trong khóa key
private int[] GetOrder(string key)
{
/¡ Sắp xếp key và lấy thứ tự của các ký tự
char[] keyArray = key ToCharArray(); Array.Sort(keyArray);
inf[] order = new int[key.Length];
for (int i = 0; i < key.Length; i++)
Trang 33for (int | = 0; j < key.Length; j++)
Giải thích mã hóa hoán vi (permutation cipher):
Đoạn mã C# bạn cung cấp thực hiện mã hóa văn bản bằng phương pháp hoán vị Thay vì thay thê các ký tự, phương pháp này sắp xếp lại vị trí của các ký tự trong văn bản dựa trên một khóa nhât định
Ham permutationCipher:
Tham số:
plaintext: Van ban can ma héa (kiéu string)
key: Khéa ma hoa (kiéu st ring)
Hoạt động:
1 Xác định kích thước khối dựa trên độ dài khóa (s1ecl-s: ze)
2 Tính toán số lượng khối cần dùng để chứa toàn bộ văn bản (»1ock:Count)
Trang 347
8
Duyét qua tlrng ky tu trong plaintext va dién vao ma tran
Xác định thứ tự sắp xếp các cột dựa trên khóa (ozdez)
Tao ma trận méi sortedMatrix bằng cách sắp xếp các cột của ma +: > theo thứ
Sắp xếp các ký tự trong key theo tht tw bang chi? cai
Tao mang order dé Iu the ty cla cdc ky ty trong key
Duyệt qua từng ký tự trong «ey va xac dinh vi tri của nó trong mảng đã sắp xếp
Trả về mang order
Mô tả thuật toán:
1 Văn bản được chia thành các khối có kích thước bằng độ dài khóa
2 Cac ky ty trong mỗi khối được sắp xếp lại theo thứ tự của các ký tự trong khóa
3 Các khối đã được sắp xếp được xáo trộn theo một cách nào đó để tăng độ phức tạp Lưu ý:
« _ Phương pháp hoán vị đơn giản này dễ bị giải mã nếu biết khóa mã hóa
« _ Có thể tăng độ bảo mật bằng cách kết hợp hoán vị với các phương pháp mã hóa khác,
ví dụ nhự mã hóa thay thê
Trang 35Mã Hóa Và Giải MÃ Hệ Mã Hóa RSA
RSA_Math math = new RSA _Math();
public string Encrypt_RSA(string filenguon, string filedich, BigInteger pk, BigInteger N, int bitlength)
StringBuilder bit = new StringBuilder();
FileStream fdich = new FileStream(filenguon, FileMode.Open); //Đọc file nhị phân
Trang 36long dich = fdich.Length;
while (dau < dich)
bit.Append(Convert.ToString(fdich.ReadByte(), 2).PadLeft(8, 'fi')); //Đọc hết file chuyển về nhị phân lưu vào string bit
dau++;
}
fdich.Close();
dich = bit.Length / sobitcat; //Tính số lần lặp
string bitthuong = bit.ToString(); //Chuyển về string thường mục đích để sử dụng lệnh substring
StringBuilder bitghi = new StringBuilder();
int i;
BigInteger tam, ghi;
for (i = fi; i < dich; i++) //Ma héa
tam = math.BinaryToNumber(bitthuong.Substring(sobitcat * i, sobitcat)); //Chuyén từ nhị phân thành số
ghi = math.Fast_Exponent(tam, pk, N); //Thực hiện mã hóa
bitghi.Append(math.BigIntegertoBinary(ghi).PadLeft(bitlength, 'fi')); //Mã hóa xong chuyển số thành lại nhị phân
FileStream ghif = new FileStream(filedich, FileMode.Create);
string bitghiv = bitghi.ToString(Q);
for (i = fi; ¡ < bitghiv.Length / 8; i++) //Mã hóa xong, ghi vào file
FileStream fnguon = new FileStream(filenguon, FileMode.Open);
StringBuilder dich = new StringBuilder();
long dem = fi, len = fnguon.Length;
while (dem < len) //Néu chua doc hét file
dem++;
dich.Append(Convert.ToString(fnguon.ReadByte(), 2).PadLeft(8, 'fi')); //Chuyển hết
về dạng nhị phân, đọc được bao nhiêu chuyển về dạng nhị phân
Trang 37string bitdoc = dich.ToString();
BigInteger ma, ro;
StringBuilder bitro = new StringBuilder();
StringBuilder bithientai = new StringBuilder();
for (int i = fi; i < bitdoc.Length / bitlength; i++)
{
Ma = math.BinaryToNumber(bitdoc.Substring(bitlength * i, bitlength)); //Chuyén vé
ro = math.Fast_Exponent(ma, sk, n); //Giải mã
bithientai.Clear(); //Lam rong mang
bithientai Append(math.BigIintegertoBinary(ro)); //Thém vao string builder while (bithientai.Length % 8 != fi) bithientai.Insert(fi, 'fi'); //Nếu bit không chia hết cho 8 thêm các số fï ở đầu
bitro.Append(bithientai);
FileStream filedi = new FileStream(filedich, FileMode.Create); //Đọc file nhị phân
string bitroghi = bitro.ToString();
for (int i = fi; i < bitroghi.Length / 8; i++)
filedi.WriteByte(Convert.ToByte(bitroghi.Substring(8 * ¡, 8), 2)); //Ghi lại bản rõ vào
file
}
filedi.Close(); //DOng file
return "Decrypt Successfully";
Trang 38if (@ == 1) return true; // a = 1 la s6 nguyên tố cùng nhau
else return false; // khéng phai
}
public BigInteger randombit(int size) //Là hàm random các số nguyên lớn {
//Khai báo thư viện Random
Random random = new Random();
BitArray bits; //Tao 1 mang bitarray
byte[] byteArray = new byte[size / 8]; //Tiến hành random
random.NextBytes(byteArray); //Random
bits = new BitArray(byteArray); //Copy vao bit array
/Ni khi random byte sé cé 2 trường hợp xảy ra
bits.Set(size - 1, false); //Tiến hành set bit
bits.CopyTo(byteArray, fi); //Copy vao mang byte
BigInteger k = new BigInteger(byteArray); //Covert vé hé 1fi
//Chuyén thap phan sang nhi phan
public string BigIntegertoBinary(Biginteger a)
Trang 39{
//res là biến kết quả
BigInteger res = fi;
phan
foreach (char c in value)
res <<= 1; //Tương đương với res = res * 2; -
res += c == '1'?1:fi; /Nếu c bằng 1 thi cộng 1, nếu sai cộng fi
res = (res * res) % mod;
if (b[i] == '1') res = (res * a) % mod;
//Kiém tra tinh nguyén té Miller rabin
if (num == 2 || num == 3) return true; //2 va 3 la snt
if (num < 2 || num % 2 == fi) return false; //Cac s6 bé hon fi va s6 chan không phải là snt BigInteger tempnum = num - 1;
Trang 40Biglnteger x = Fast_Exponent(a, d, num); //Tính a^d mod nuum
if ((x == 1) || (x == (num - 1))) continue; //Nếu bằng 1 hoặc num-1 thì nghỉ ngờ là snt, chuyển qua bước lặp khác
for (j = fi; | < s; j++)
{
x = Fast_Exponent(x, 2, num);
if (x == (num - 1)) break; //nghi ngờ là snt
else return false;
}
if (| == s) return false; //Nếu j == s -> Không phải là snt
return true;
Giai thich chi tiét ma C# vé RSA
Cau truc ma:
o Decrypt_RSA(string filenguon, string filedich, BigInteger sk,
BigInteger n, int bitlength): Giai ma RSA
Chức năng:
‹ _ Lớp RSA_Crypto cung cấp các phương thức mã hóa và giải mã file bằng
thuật toán RSA
« - Nó sử dụng các hàm toán học từ lớp RSA_Math để hỗ trợ các phép tính cần thiết cho RSA
Cách thức hoạt động:
1 Mã hóa RSA (phương thức Encrypt_RSA):
* Đọc file nguồn: Mở file nguồn ở chế độ đọc nhị phân và đọc nội dung
thành chuỗi nhị phân