Cho phép tính phần tử nghịch đảo của một số theo modulo, được sử dụng trong một số hệ mật mã khóa công khai ở các quá trình tạo khóa và giải mã... Thuật toán mã hóa phi đối xứng Puclic-k
Trang 1MỤC LỤC
LỜI NÓI ĐẦU 3
CHƯƠNG 1 CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ 4
1.1 ĐỒNG DƯ VÀ SỐ HỌC MODULO 4
1.2 HÀM Φ – EULER (EULER’S TOTIENT FUNCTION) 6
1.3 TÌM PHẦN TỬ NGHỊCH ĐẢO 7
1.4 THUẬT TOÁN LŨY THỪA NHANH 8
CHƯƠNG 2 TỔNG QUAN VỀ MÃ HÓA 9
2.1 GIỚI THIỆU CHUNG VỀ MÃ HÓA 9
2.1.1 Mục tiêu của an toàn bảo mật thông tin 10
2.1.2 Khái niệm hệ mật mã 11
2.1.3 Mã hoá và giải mã 11
2.1.4 Quy trình mã hoá và giải mã dữ liệu 12
2.1.5 Thuật toán mã hóa đối xứng (Symmetric Algorithms) 12
2.1.6 Thuật toán mã hóa phi đối xứng (Puclic-key-Algorithms) 14
2.1.7 Thám mã (Cryptanalyis) 15
2.2 MẬT MÃ CỔ ĐIỂN 18
2.2.1 Mã dịch vòng 18
2.2.1.1 Mô tả 18
2.2.1.2 Đánh giá độ an toàn 19
2.2.2 Mã thay thế 19
2.2.2.1 Mô tả 19
2.2.2.2 Đánh giá độ an toàn 20
2.2.3 Mã Affine 20
2.2.3.1 Mô tả 20
2.2.3.2 Đánh giá độ an toàn 22
2.2.4 Mã Vigenere 22
2.2.4.1 Mô tả 22
2.2.4.2 Đánh giá độ an toàn 23
2.2.5 Hệ mã Hill 24
2.2.5.1 Mô tả 24
2.2.5.2 Đánh giá độ an toàn 26
2.2.6 Hệ mã Hoán vị 26
2.2.6.1 Mô tả 26
2.2.6.2 Đánh giá độ an toàn 27
2.2.7 Sơ lược về thám mã các hệ mã cổ điển 27
2.2.8 Nhận xét chung về các hệ mật mã cổ điển 28
CHƯƠNG 3 MỘT SỐ THUẬT TOÁN MÃ HÓA CÔNG KHAI 29
3.1 HỆ MÃ CÔNG KHAI 29
3.2 HỆ MÃ BA LÔ (MHK) 32
3.2.1 Tạo khoá 32
3.2.2 Mã hoá 32
3.2.3 Giải mã 33
3.2.4 Ví dụ 33
3.3 HỆ MÃ HÓA - RSA 34
Trang 23.3.1 Thuật toán RSA 35
3.3.2 Đặt vấn đề 37
3.3.3 Giải thuật RSA 37
3.3.3.1 Tạo khoá 37
3.3.3.2 Mã hoá 38
3.3.3.3 Giải mã 39
3.4 VÍ DỤ MINH HỌA 40
3.5 MỘT SỐ VẤN ĐỀ 41
3.6 ĐỘ AN TOÁN CỦA HỆ MẬT MÃ RSA 43
3.7 SƠ LƯỢC VỀ THÁM MÃ RSA 44
3.7.1 Tấn công dựa trên thời gian 44
3.7.2 Tấn công lựa chọn thích nghi bản mã 45
3.8 ỨNG DỤNG CỦA HỆ MẬT MÃ RSA 45
3.8.1 Giới thiệu về chữ ký điện tử và vấn đề xác nhận 46
3.8.2 Sơ đồ chữ ký RSA 47
3.8.3 Tấn công chữ ký điện tử 49
3.9 HỆ MÃ ELGAMAL 51
CHƯƠNG 4 GIỚI THIỆU VỀ NGÔN NGỮ C# VÀ MỘT SỐ GIAO DIỆN CHƯƠNG TRÌNH 54
4.1 LỊCH SỬ NGÔN NGỮ C# 54
4.2 NHỮNG THẾ MẠNH CỦA NGÔN NGỮ C# 54
4.3 CÁC BƯỚC CHUẨN BỊ CHO CHƯƠNG TRINH 57
4.4 MỘT SỐ GIAO DIỆN 58
4.4.1 Giao diện chính 58
4.4.2 Giao diện chương trình nhập khóa cho thuật toán RSA 59
4.4.3 Giao diện chương trình thuật toán RSA 60
4.4.4 Giao diện chương trình chữ ký (phần ký văn bản) 61
4.4.5 Giao diện chương trình chữ ký (phần ký kiểm tra chữ ký) 62
KẾT LUẬN 63
TÀI LIỆU THAM KHẢO 65
PHỤ LỤC 66
Trang 3LỜI NÓI ĐẦU
Từ xưa đến nay thông tin luôn là yếu tố quan trọng trong các hoạt động của đời sống con người Trong thời đại ngày nay, các phương thức truyền đạt thông tin ngày càng đa dạng và phát triển Với sự ra đời của máy tính và mạng máy tính, việc trao đổi thông tin đã trở lên dễ dàng hơn, nhanh chóng hơn, đa dạng hơn Nhưng kèm theo đó là các nguy cơ xâm phạm thông tin cũng ngày càng tăng Nắm bắt được thông tin nhiều khi mang ý nghĩa quyết định, sống còn đặc biệt trong các lĩnh vực: kinh tế, chính trị, an ninh, quốc phòng…Vì vậy việc bảo mật thông tin đã, đang và sẽ là vấn đề được đặt ra rất cấp bách Để giải quyết vấn đề đó các hệ mật mã đã ra đời Từ các hệ mật mã sơ khai cổ điển như: Hệ mã Dịch Vòng, hệ mã Hill, hệ mã Affine,…, cho đến các hệ mật mã hiện đại, phức tạp như hệ mã DES Các hệ mật mã công khai như hệ mã RSA, hệ mã Ba Lô Nhưng đi kèm với sự ra đời và phát triển của các hệ mật mã là các phương pháp phá khoá các hệ mật mã đó Cuộc chiến giữa bảo mật thông tin và xâm phạm thông tin vẫn luôn diễn ra một cách thầm lặng nhưng vô cùng gay gắt
Với mong muốn tìm hiểu được phương pháp bảo mật thông tin em đã
chọn đề tài THUẬT TOÁN RSA VÀ ỨNG DỤNG CHỮ KÝ ĐIỆN TỬ làm
đồ án tốt nghiệp Tuy đã có nhiều cố gắng trong việc xây dựng đề tài nhưng do còn hạn chế về mặt thời gian cũng như kiến thức và kinh nghiệm thực tế nên đề tài không tránh khỏi những thiếu sót Vì vậy em rất mong được sự chỉ bảo, đóng góp ý kiến của các thầy cô giáo cho đề tài của em ngày càng hoàn thiện hơn
Em xin chân thành cảm ơn sự giúp đỡ nhiệt tình của cô: Th.s Nguyễn Hiền Trinh– Bộ môn khoa học máy tính và các thầy cô đã trang bị kiến thức
cho em để em hoàn thành đề tài này
Trang 4
dư (nghĩa là: a mod n = b mod n) và được kí hiệu hay a ≡ b (mod n)
– Có thể cộng, trừ hoặc nhân từng vế của nhiều đồng dư thức theo cùng một
a1 * a2 * * ak b1 * b2 * * bk (mod n)
- Nếu a ≡ b (mod n) và c|n, c > 0 thì ta có a ≡ b (mod c )
phép cộng, phép nhân thông thường nhưng kết quả được chia cho n để lấy phần
Trang 5Chú ý: Phép cộng trong số học modulo n cũng có phần tử nghịch đảo cộng
Chú ý: Tương tự như phép cộng, phép nhân modulo n cũng có phần tử nghịch
Bảng 1.1 Kết quả minh họa phép cộng với modulo n = 5
Bảng 1.2 Kết quả minh họa phép nhân modulo n = 5
Trang 6 Các tính chất của các phép toán số học modulo:
: (a + (n – a)) mod n = ((n – a) + a) mod n = 0
1.2 Hàm Φ – Euler (Euler’s totient function)
Định nghĩa 1.2: Cho n là số nguyên dương, hàm Φ-Euler của n, ký hiệu Φ(n), là số các số nguyên dương nhỏ hơn hoặc bằng n và nguyên tố cùng nhau với n
Công thức tính tổng quát hàm Φ-Euler như sau: Giả sử n được phân tích
Trang 7* Định lý 1.4 : Cho Fq làmột trường hữu hạn, và một phần tử g Fq, định
* Định lý 1.3: Mỗi trường hữu hạn đều có phân tử sinh Nếu g là một phần
divisor)
1.3 Tìm phần tử nghịch đảo
Thuật toán tìm phần tử nghịch đảo còn được gọi là thuật toán Euclide mở rộng Cho phép tính phần tử nghịch đảo của một số theo modulo, được sử dụng trong một số hệ mật mã khóa công khai ở các quá trình tạo khóa và giải mã
* Thuật toán Euclide
Để tìm UCLN của a và b ta tiến hành như sau:
- Lấy số lớn (giả sử là b) chia cho số nhỏ a được phần dư r (0 ≤ r < a)
- Tiếp tục coi a là số lớn, r là số nhỏ và lặp lại quá trình trên cho đến khi số
dư trong phép chia r = 0
Số chia trong phép chia cuối cùng là UCLN (a,b )
Ví dụ: Tìm UCLN của a=180, a=72
Trang 81.4 Thuật toán lũy thừa nhanh
nhiều trong các hệ mật mã khóa công khai Tốc độ thực hiện của các quá trình
mã hóa và giải mã của hệ mật mã, phụ thuộc rất nhiều vào phép tính này với toán hạng là những số nguyên cực lớn Vì vậy đòi hỏi cần phải có một thuật toán thực hiện phép tính lũy thừa modulo càng nhanh càng tốt Trong phần này sẽ trình bày chi tiết về thuật toán và chi phí thực hiện của thuật toán thường được sử dụng nhất hiện nay, gọi là : “ Thuật toán lũy thừa nhanh”
Thuật toán này, dựa vào biểu diễn nhị phân của số mũ để thực hiện phép tính lũy thừa modulo của một số nguyên, chỉ với một vài phép tính nhân và phép tính bình phương Thuật toán có các tham số đầu vào là: Số M, số N và biểu diễn
*2 1 2
i
k i
i i
i
e k e
Trang 9CHƯƠNG 2 TỔNG QUAN VỀ MÃ HÓA
2.1 Giới thiệu chung về mã hóa
Mọi người đều biết rằng khi muốn giữ một cái gì đó cho riêng mình thì cần phải che giấu nó đi Để gửi bức thư riêng cho một người bạn, chúng ta phải cho nó vào một bao thư và gián nó lại Nhưng nếu bức thư đó quan trọng mà chúng ta không muốn cho ai khác ngoài người nhận biết được nội dung bức thư
đó Chúng ta không thể chắc chắn rằng trên đường bức thư đó tới tay người nhận, bức thư đó có được an toàn hay không
Từ đó nảy sinh vấn đề bảo vệ thông tin Từ xa xưa, người ta đã biết áp dụng các biện pháp bảo vệ thông tin thô sơ như là giấu thông tin, cho người canh gác,…Khi trí tuệ sáng tạo của con người phát triển thì không thể áp dụng biện pháp thô sơ này được
Ngày nay với sự bùng nổ của công nghệ thông tin đặc biệt là Internet và Email, thì vấn đề bảo vệ thông tin càng trở nên quan trọng quyết định sự sống còn của một công ty, đảm bảo an ninh quốc phòng cho mỗi quốc gia,…
Có hai phương pháp để đạt được mục tiêu này: Kiểm soát lối vào ra và mã hóa dữ liệu
phép vào hệ thống nhờ xây dựng các kiểm soát thích hợp, ví dụ như các hệ sử dụng mật khẩu, mà trong đó chỉ những người được phép
sử dụng mới qua được để thâm nhập vào hệ thống Hệ này có một
số nhược điểm Chẳng hạn dữ liệu lưu trữ bên ngoài cũng cần được bảo vệ và việc này dường như chỉ có sự bảo vệ thuần túy vật lý là
có thể đạt được Như vậy, điều đó dẫn đến sự kém an toàn đối với
hệ thống Một nhược điểm nữa của phương pháp này đó là không thực tiễn khi ta quan hệ với các hệ số lớn
khác: mã hóa dữ liệu Điều này có nghĩa là thông tin được lưu trữ
Trang 10trong hệ dưới dạng đã được mã hóa Khi đó, những người truy nhập trái phép dù có lấy được thông tin, nhưng nó lại ở dạng mã hóa, do
đó thông tin này vô nghĩa nếu họ không biết cách giải
Mật mã học nghiên cứu các hệ thống dùng cho việc truyền thông bí mật,
gồm có hai lĩnh vực nghiên cứu: Mã hóa (Cryptography) – thiết kế các hệ truyền thông bí mật, và Giải mã (Cryptanalysis) – nghiên cứu các phương pháp để giải
mã các hệ truyền thông bí mật Mật mã học trước đây chủ yếu được áp dụng trong các hệ truyền thông quân sự và ngoại giao, nhưng các áp dụng có ý nghĩa thực tế của nó ngày nay đã xuất hiện trong tất cả các lĩnh vực của xã hội Hai ví
dụ minh chứng là các hệ thống tập tin máy tính (trong đó mỗi người sử dụng lưu trữ riêng các tập tin của họ) và các hệ chuyển ngân điện tử Một người sử dụng máy tính chỉ muốn cất giữ riêng các tập tin máy tính của mình cũng như ta cất các giấy tờ trong tủ hồ sơ, và một ngân hàng thì muốn việc chuyển ngân điện tử
sẽ an toàn như là được chuyển ngân bằng xe bọc thép vậy
2.1.1 Mục tiêu của an toàn bảo mật thông tin
Bên cạnh việc làm thế nào để che dấu nội dung thông tin thì mã hoá phải đảm bảo các mục tiêu sau:
1 Tính bí mật (Confjdentialy): Đảm bảo dữ liệu được truyền đi một cách an
toàn và không thể bị lộ thông tin nếu như có ai đó cố tình muốn có được nội dung của dữ liệu gốc ban đầu Chỉ những người được phép mới có khả năng đọc được nội dung thông tin ban đầu
2 Tính xác thực (Authentication): Giúp cho người nhận dữ liệu xác định
được chắc chắn dữ liệu mà họ nhận là dữ liệu gốc ban đầu Kẻ giả mạo không thể có khả năng để giả dạng một người khác hay nói cách khác không thể mạo danh để gửi dữ liệu Người nhận có khả năng kiểm tra nguồn gốc thông tin mà họ nhận được
3 Tính toàn vẹn (Integrity): Giúp cho người nhận dữ liệu kiểm tra được
rằng dữ liệu không bị thay đổi trong quá trình truyền đi Kẻ giả mạo không thể có khả năng thay thế dữ liệu ban đầu bằng dữ liệu giả mạo
Trang 114 Tính không thể chối bỏ (Non-repudation): Người gửi hay người nhận
không thể chối bỏ sau khi đã gửi hoặc nhận thông tin
2.1.2 Khái niệm hệ mật mã
Một hệ mật mã là một bộ 5 (P,C,K,E,D) thoả mãn các điều kiện sau:
- P: Là một tập hợp hữu hạn các bản rõ, nó được gọi là không gian bản rõ
- C: Là tập hữu hạn các bản mã, nó được gọi là không gian bản mã Mỗi phần
Trang 122.1.4 Quy trình mã hoá và giải mã dữ liệu
Quy trình thực hiện như sau:
Bộ phận quản lý khoá thực hiện lập khoá mã hoá (Ke) và khoá giải mã (Kd)
Dữ liệu gốc được mã hoá nhờ khoá mã hoá Vấn đề ở đây là quản lý khóa như thế nào để cho việc mã hoá và giải mã tương đối đơn giản và đảm bảo tuyệt đối
bí mật cho khoá giải mã
2.1.5 Thuật toán mã hóa đối xứng (Symmetric Algorithms)
Mật mã đối xứng cũng được gọi là mật mã Private key Cryptograpgy hay mật mã Secret key Cryptography Nó sử dụng một chìa khoá duy nhất để mã hoá
và giải mã dữ liệu đây là hạn chế sự an toàn và phổ biến của phương pháp đối xứng, đồng thời cũng là điểm yếu, bởi vì chỉ cần một bên để lộ khoá thì bí mật sẽ
bị mất
Hệ mã cổ điển là loại mã được thực hiện thông qua hàm f có tính thuận
Khi một mật mã đối xứng được sử dụng cho một bản rõ, người sử dụng thực hiện mã hoá với một secret key Khi một giao tiếp được sử dụng mã hoá đối xứng, hai giao tiếp sẽ chia sẻ nhau cùng một mật mã để mã hoá và giải mã gói tin
Khoá Ke
Quản lý
Hình 2.2.3 Quy trình mã hoá dữ liệu
Trang 13Trong hệ thống mã hoá đối xứng, trước khi truyền dữ liệu, 2 bên gửi và nhận phải thoả thuận về khoá dùng chung cho quá trình mã hoá và giải mã Sau
đó, bên gửi sẽ mã hoá bản rõ (Plaintext) bằng cách sử dụng khoá bí mật này và gửi thông điệp đã mã hoá cho bên nhận Bên nhận sau khi nhận được thông điệp
đã mã hoá sẽ sử dụng chính khoá bí mật mà hai bên thoả thuận để giải mã và lấy lại bản rõ (Plaintext)
Sự bảo mật của một thuật toán đối xứng dựa trên khoá Tiết lộ khoá có nghĩa rằng bất cứ ai biết khoá đều có thể mã hoá và giải mã thông tin trên hệ thống này
Nhóm mã hoá và giải mã bằng thuật toán đối xứng được thể hiện bằng công thức:
Trang 142.1.6 Thuật toán mã hóa phi đối xứng (Puclic-key-Algorithms)
Hay còn được gọi với một cái tên khác là mã hoá khoá công khai (Public Key Cryptography), nó được thiết kế sao cho khoá sử dụng trong quá trình mã hoá khác biệt với khoá được sử dụng trong quá trình giải mã Hơn thế nữa, khoá
sử dụng trong quá trình giải mã không thể được tính toán hay luận ra được từ khoá được dùng để mã hoá và ngược lại, tức là hai khoá này có quan hệ với nhau
về mặt toán học nhưng không thể suy diễn được ra nhau Thuật toán này được gọi là mã hoá công khai vì khoá dùng cho việc mã hoá được công khai cho tất cả mọi người Một người bất kỳ có thể dùng khoá này để mã hoá dữ liệu nhưng chỉ duy nhất người mà có khoá giải mã tương ứng mới có thể đọc được dữ liệu mà thôi Do đó trong thuật toán này có 2 loại khoá: Khoá để mã hoá được gọi là khóa công khai, khoá để giải mã được gọi là khóa bí mật
Trong mỗi quá trình truyền thông tin sử dụng mật mã bất đối xứng chúng cần một cặp khóa duy nhất Nó tạo ra khả năng có thể sử dụng linh hoạt và phát triển trong tương lai hơn là giải pháp mật mã đối xứng Khóa bí mật bạn cần phải giữ riêng và đảm bảo tính bảo mật và nó không truyền trên mạng Khóa công khai được cung cấp miễn phí và được công bố rộng rãi cho mọi người
Thuật toán này được thể hiện bằng:
E k1 (P)=C
D k2 (C)=P
D k2 (E k1 (P))=P Hình 2.2.5 Một hệ thống mật mã bất đối xứng
Trang 15Trong một số trường hợp, thông điệp sẽ được mã hoá bằng khoá riêng và giải mã bằng khoá công khai, điều này thường được áp dụng đối với chữ ký điện
mã có thể thu được bản rõ hoặc khoá, hoặc cũng có thể tìm thấy điểm yếu trong một hệ thống mã hoá Các thuật toán sử dụng cho phần lớn các hệ thống mã hoá
là nổi tiếng, vì vậy chúng ta giả thiết rằng người thám mã đã biết thuật toán để bắt đầu thám mã
Như vậy, vấn đề cốt yếu của một hệ mã hoá tốt là việc khôi phục bản rõ P
Có 6 tình huống mà người thám mã có thể có khi phân tích Trong các tình huống đó giả sử rằng người thám mã đã biết thuật toán được dùng để mã hoá:
1 Chỉ biết bản mã (Ciphertext-only attack) Trong trường hợp này, người
thám mã có bản mã của một thông điệp, và biết được thuật toán được dùng để
mã hoá Công việc của người thám mã là phải tìm được bản rõ của thông điệp, và tốt hơn hết là tìm ra khoá được sử dụng để mã hoá thông điệp, để từ đó giải mã những thông điệp khác được mã hoá với cùng khoá đó
Để việc phân tích của người thám mã có hiệu quả thì tốt hơn hết là bản mã phải dài Trong những hệ mã đơn giản, ví dụ như CAESAR, một bản mã ngắn cũng đưa lại kết quả bởi vì chỉ có duy nhất một khoá được sử dụng để mã hoá Trong những hệ hoàn chỉnh hơn thì bản mã dài là cần thiết Hiệu quả của phương
Trang 16pháp phân tích có thể dựa trên thông tin thống kê liên quan tới ngôn ngữ mà bản
rõ được sử dụng Ví dụ như thông tin về tần số xuất hiện của mỗi ký tự riêng lẻ trong tiếng Anh
Đầu vào: C1=Ek(P1), C2=Ek(P2), Ci=Ek(Pi) (với i 1)
2 Biết bản rõ (Known-plaintext attack) Người thám mã không chỉ biết
bản mã của một vài thông điệp mà còn biết cả bản rõ của những thông điệp này Công việc của người thám mã là tìm ra khoá (hoặc các khoá) được sử dụng để
mã hoá các thông điệp hoặc thuật toán để giải mã bất kỳ một thông điệp mới nào được mã hoá bằng khoá đó
Đầu vào: P1, C1=Ek(P1), P2, C2=Ek(P2), Pi, Ci=Ek(Pi)
3 Bản rõ được lựa chọn (Chosen-plaintext attack) Người thám mã
không chỉ phân tích bản mã mà còn được kết hợp với bản rõ của một vài thông điệp, nhưng các bản rõ không là tuỳ ý mà do người thám mã phải lựa chọn Trường hợp này tốt hơn trường hợp (2) đối với người thám mã, bởi vì người thám mã có thể chọn khối bản rõ đặc trưng để giải mã, nó có thể mang lại nhiều thông tin về khoá Công việc của người thám mã là tìm khoá (hoặc các khoá) được sử dụng để mã hoá các thông điệp hoặc một thuật toán để giải mã bất cứ thông điệp đã được mã hoá mới nào bằng các khoá đó
Đầu vào: P1, C1=Ek(P1), P2, C2=Ek(P2), Pi, Ci=Ek(Pi), người thám mã
4 Bản rõ được lựa chọn thích hợp (Adaptive-chose-plaintext attack)
Đây là một trường hợp đặc biệt của trường hợp bản rõ được lựa chọn Người thám mã không chỉ có thể được lựa chọn bản rõ mà nó đã được mã hoá, mà họ còn có thể biến đổi những điểm cần thiết dựa trên kết quả của những lần mã hoá
Trang 17trước Với trường hợp bản rõ được lựa chọn, người thám mã có thể lựa chọn một khối bản rõ lớn để giải mã; trong trường hợp bản rõ được lựa chọn thích hợp họ
có thể lựa chọn một khối bản rõ nhỏ hơn sau đó lựa chọn khối khác dựa vào kết quả của khối đầu tiên, v.v
5 Bản mã được lựa chọn (Chosen-plaintext attack) Người thám mã có
thể chọn các bản mã khác nhau và biết được bản rõ Công việc của người thám
mã là tìm khoá
Đầu vào: C1, P1=Dk(C1), C2, P2=Dk(C2), Ci, Pi=Dk(Ci)
Cần tìm: k
6 Khoá được lựa chọn (Chosen-Key) Người thám mã biết phương pháp
mẫu bản mã nào Trong trường hợp này người thám mã có rất nhiều thời gian để làm việc
Trường hợp (5), (6) thường được ứng dụng chủ yếu đối với các hệ thống
mã hoá sử dụng khoá công khai
Hiện nay có rất nhiều thuật toán mã hoá Có ba thuật toán thường được sử dụng :
DES (Data Encryption Standard) là thuật toán mã hoá trên máy tính hiện nay đang được sử dụng rộng dãi nhất DES là chuẩn mã hoá được phát minh
ở Mỹ Nó là thuật toán đối xứng; khoá để mã và khoá để giải giống nhau
RSA (tên của thuật toán được viết tắt tên của các tác giả - Rivest, Shamir và Adleman) là thuật toán công khai phổ biến nhất Nó có thể được sử dụng cho cả mã hoá và chữ ký điện tử
DSA (Digital Signature Algorithm) là thuật toán khoá công khai Nó không được sử dụng để mã hoá mà được dùng trong chữ ký điện tử
Trang 18trên bảng chữ cái tiếng Anh)
Nhận xét: Trong trường hợp k=3, hệ mật thường được gọi là hệ mật Caesar thường được Julius Caesar sử dụng
Ví dụ:
Mã hoá:
Giả sử khoá cho MDV là K = 11 và bản rõ là : wewillmeetatmidnight
Đổi chuỗi ra số theo tứ tự trong bảng chữ cái ta có:
Trang 19Giả sử P = C = K = Z26 K chứa mọi hoán vị có thể của 26 kí hiệu
Điều kiện để một hệ mật an toàn là phép tìm khoá vét cạn là không thể
có thể cho tới khi nhận được bản rõ có nghĩa Vì vậy hệ mã dịch vòng là một hệ
mã không an toàn
2.2.2 Mã thay thế
2.2.2.1 Mô tả
Để có được bản mã người ta thay đổi một ký hiệu trong bản rõ bằng một
ký hiệu nào đó Trên thực tế, mã thay thế có thể lấy cả P và C đều là bộ chữ cái
giải mã đều là các phép toán đại số trong mã thay thế, có thể xem mã hoá và giải
mã như các hoán vị của các ký tự Ta có thể định nghĩa mã thay thế dưới dạng toán học như sau
Sau đây là một ví dụ về phép hoán vị ngẫu nhiên tạo nên một hàm mã hoá ( cũng như trước các ký hiệu của bản rõ được kí hiệu bằng chữ in thường còn các ký hiệu của bản mã được kí hiệu bằng chữ in hoa)
Trang 20A b c d E f g h i ị k l m
Như vậy e(a)=X, e(b)= N,… Hàm giải mã là phép hoán vị ngược Điều này được thực hiện bằng cách viết hàng thứ hai lên trước rồi sắp xếp theo thứ tự chữ cái Ta nhận được:
Bởi vậy d(A)= d, d(B)= l,…
2.2.2.2 Đánh giá độ an toàn
Mỗi khoá của mã thay thế là một phép hoán vị của 26 kí tự Số các hoán vị này
là 26! Bởi vậy, phép tìm khoá vét cạn không thể thực hiện được, thậm chí bằng máy tính Tuy nhiên mã hoán vị lại dễ dàng bị thám bằng các phương pháp khác.
2.2.3 Mã Affine
2.2.3.1 Mô tả
Mã Affine là một trường hợp đặc biệt của mã thay thế chỉ gồm có 26 trong
số 26! các hoán vị của 26 phần tử Mã Affine được định nghĩa như sau:
Trang 21Để việc giải mã có thể thực hiện được, yêu cầu nhất thiết là hàm Affine
sau:
ax + b y (mod 26) phải có nghiệm x duy nhất Đồng dư thức này tương đương với:
ax y – b (mod 26)
cứu phương trình đồng dư:
Ta biết rằng, phương trình này có một nghiệm duy nhất đối với mỗi y khi
và chỉ khi UCLN (a , 26) = 1( ở đây hàm UCLN là ước chung lớn nhất của các biến của nó) Trước tiên ta giả sử rằng UCLN (a , 26) = d > 1 Khi đó, đồng dư
x = 26/d Trong trường hợp này, e(x) = ax + b mod 26 không phải là một hàm đơn ánh và bởi vậy nó không thể là hàm mã hoá hợp lệ
Trang 22Cho m là một số nguyên dương cố định nào đó Giả sử P = C = K = (Z26)m
và
Để minh hoạ ta hãy mã hoá bản rõ “hot” Trước tiên ta biến đổi các chữ h, o, t
thành các thặng dư theo modulo 26 Ta được các số tương ứng là 7,14,19 bây giờ sẽ mã hoá:
7 x 7+3 mod 26 = 52 mod 26 = 0
7 x 14 + 3 mod 26 = 101 mod 26 = 23
7 x 19 + 3 mod 26 = 136 mod 26 = 6 Bởi vậy 3 kí hiệu của bản mã là 0, 23, 6 tương ứng với xâu kí tự AXG
Thực hiện giải mã theo hàm giả mã ta thu được bản mã “hot”
2.2.3.2 Đánh giá độ an toàn
Do đặc trưng của hệ mã cổ điển: Hàm mã hoá phải khả nghịch, có f thì
nghiệm duy nhất khi (a,26) = 1
Từ nhận xét trên ta thấy, sẽ có 12 cách chọn a, 26 cách chọn b do đó có: 12*26 = 312 cách chọn khoá Như vậy độ an toàn là nhỏ
2.2.4 Mã Vigenere
2.2.4.1 Mô tả
Trong cả hai hệ mã dịch vòng và mã thay thế (một khi khoá đã được chọn) mỗi ký tự sẽ được ánh xạ vào một ký tự duy nhất Vì lý do đó, các hệ mật còn được gọi là các hệ thay thế đơn biểu Còn đây là một hệ mật không phải là bộ chữ đơn, mật mã này lấy tên của Blaise de Vigenere sống vào thế kỷ XVI Hệ mã Vigenere được định nghĩa như sau:
Trang 23Sử dụng phép tương ứng A <=> 0, B<=> 1,…, Z<=>25 mô tả ở trên ta có thể gắn cho mỗi khoá K với một chuỗi kí tự có độ dài m được gọi là từ khoá Mật
mã Vigenere sẽ đồng thời mã hoá m kí tự
Ta thấy rằng các từ khoá có thể với độ dài m trong mật mã Vigenere là
cũng yêu cầu thời gian khá lớn Ví dụ nếu m =5 thì không gian khoá cũng có kích
Trang 24Cho m là một số nguyên dương cố định Cho P=C=(Z26)m và cho
Với một khoá kK ta xác định
không phải dùng máy tính)
Trong hệ mật Vigenere có từ khoá độ dài m, mỗi kí tự có thể được ánh xạ vào trong m ký tự có thể có Một hệ mật như vậy được gọi là hệ mật thay thế đa biểu Nói chung, việc thám mã hệ mật thay thế đa biểu sẽ khó khăn hơn so với thám mã hệ đơn biểu
2.2.5 Hệ mã Hill
2.2.5.1 Mô tả
Mật mã Hill cũng là một hệ mật thay thế đa biểu do Lester S.Hill đưa ra
m tổ hợp tuyến tính của m ký tự trong một phần tử của bản rõ để tạo ra m ký tự ở một phần tử của bản mã Hệ mã Hill được định nghĩa như sau:
Nhận xét: để giải mã được thì ma trận thức K phải có nghịch đảo K có nghịch đảo khi và chỉ khi định thức của nó khác 0 Tuy nhiên, điều quan trọng
đảo theo modulo 26 khi và chỉ khi UCLN( det K, 26) = 1
Sau đây sẽ chứng minh ngắn gọn kết quả này
Trước tiên, giả sử rằng UCLN (det K, 26) =1 Khi đó det K có nghịch đảo
cách loại bỏ hàng thứ i và cột thứ j Và định nghĩa ma trận K* có phần tử (i,j) của
thể chứng tỏ rằng:
Trang 25Giả sử cần mã hoá bản rõ “July” Ta có hai phần tử của bản rõ để mã hoá: (9,20)
(ứng với Ju) và (11,24) (ứng với ly) Ta tính như sau:
Trang 26Cho m là một số nguyên dương xác định nào đó Cho P=C= (Z26)m và cho K gồm tất cả các hoán vị của {1,…,m} Đối với một khoá (tức là một hoán vị)
2.2.5.2 Đánh giá độ an toàn
Do không gian khoá nhỏ hơn so với hệ mã Vigenere nên độ an toàn của hệ
mã Hill nhỏ hơn so với hệ mã Vigenere
2.2.6 Hệ mã Hoán vị
2.2.6.1 Mô tả
Tất cả các hệ mật mã thảo luận ở trên đều ít nhiều xoay quanh phép thay thế: Các ký tự của bản rõ được thay thế bằng các ký tự khác trong bản mã Ý tưởng của Mã Hoán Vị là giữ các ký tự của bản rõ không thay đổi nhưng sẽ thay đổi vị trí của chúng bằng cách sắp sếp lại các ký tự này Thật ra thì sự phân biệt giữa Mã Hoán Vị và mã Thay Thế đã được Giovani Porta chỉ ra từ năm 1563 Định nghĩa hình thức cho Mã Hoán vị như sau:
Ví dụ:
Giả sử m = 6 và các phép hoán vị (π ) như sau:
Trang 27Khi đó phép hoán vị ngược π-1 sẽ là:
Bây giờ giả sử ta có bản rõ
Shesellsseashellsbytheseashore
Trước tiên ta nhóm bản rõ thành 6 nhóm các kí tự
Shesel lsseas hellsb ythese ashore
Bây giờ mỗi nhóm 6 chữ cái được sắp xếp lại theo phép hoán vị π ta có:
EESLSH SALSES LSHBLE HSYEET HRAEOS Như vậy bản mã thu được là: EESLSHSALSESLSHBLEHSYEETHRAEOS
2.2.6.2 Đánh giá độ an toàn
Không giống với Mã Thay Thế ở đây không có các phép toán đại số nào cần thực hiện khi mã hoá và giải mã nên thích hợp hơn cả là dùng các ký tự mà không dùng các thặng dư theo modulo 26 Thực tế mã hoán vị là trường hợp đặc biệt của mật mã Hill
2.2.7 Sơ lược về thám mã các hệ mã cổ điển
Trong phần này ta sẽ bàn tới một vài kỹ thuật thám mã Giả thiết chung ở đây là luôn coi đối phương đã biết hệ mật đang dùng Giả thiết này được gọi là nguyên lý Kerekhoff Dĩ nhiên, nếu đối phương không biết hệ mật được dùng thì nhiệm vụ của anh ta sẽ khó khăn hơn Tuy nhiên, ta không muốn độ mật của một
hệ mã lại dựa trên một giả thiết không chắc chắn là đối phương không biết hệ mật được sử dụng Do đó, mục tiêu trong thiết kế một hệ mật là phải đạt được độ mật dưới giả thiết Kerekhoff
Trước tiên ta phân biệt các mức độ tấn công khác nhau vào các hệ mật Sau đó là một số loại thông dụng nhất:
- Chỉ có bản mã: Thám mã chỉ có xâu bản mã y
- Chỉ có bản mã y và một bản rõ x
Trang 28- Bản rõ đã biết được lựa chọn: Một người tấn công có thể truy nhập được vào hệ thống và chọn một bản rõ x,sau đó mã hoá thành bản mã y tương ứng
- Bản mã được lựa chọn: Người tấn công có thể truy nhập được vào hệ thống và chọn một bản mã y, sau đó giải mã được thành bản rõ x tương ứng
Trong mỗi trường hợp trên, điều đối tượng cần phải xác định chính là khoá
đã sử dụng Rõ ràng 4 mức tấn công trên đã được liệt kê theo độ tăng của sức mạnh tấn công Nhận thấy rằng, tấn công theo bản mã được lựa chọn là thích hợp với các hệ mật khoá công khai
Phương pháp chung:
Kỹ thuật thám mã sử dụng phương pháp chung là dùng các kỹ thuật thống
kê để tìm tần suất xuất hiện các ký tự và các cụm ký tự
Đối với các bản mã cần phá, cũng thực hiện phép thống kê tương ứng rồi lần lượt thử gán các ký hiệu có tần suất xuất hiện tương đương với nhau Bằng cách như vậy có thể làm giảm bớt số lần thử
2.2.8 Nhận xét chung về các hệ mật mã cổ điển
- Tính bảo mật kém
- Khoá có thể có nhiều dạng khác nhau nhưng chỉ có một khoá chung duy nhất cho cả người mã hoá và người giải mã
- Không thể dùng vào mục đích xác thực, không dùng được cho chữ kí điện tử
Trang 29CHƯƠNG 3 MỘT SỐ THUẬT TOÁN MÃ HÓA CÔNG KHAI
3.1 Hệ mã công khai
Hệ mật mã hóa khóa công khai là một dạng mật mã hóa cho phép người
sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan
hệ toán học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật)
Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng nghĩa với mật mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn tương
đương Có những thuật toán mật mã khóa bất đối xứng không có tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều cần phải giữ bí mật
Trong mật mã hóa khóa công khai, khóa cá nhân phải được giữ bí mật trong khi khóa công khai được phổ biến công khai Trong 2 khóa, một dùng để
mã hóa và khóa còn lại dùng để giải mã Điều quan trọng đối với hệ thống là không thể tìm ra khóa bí mật nếu chỉ biết khóa công khai
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:
Mã hóa: Giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải
mã được
với một khóa bí mật nào đó hay không
Thỏa thuận khóa: Cho phép thiết lập khóa dùng để trao đổi thông tin
mật giữa 2 bên
Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều hơn các kỹ thuật mã hóa khóa đối xứng nhưng những lợi điểm mà chúng mang lại khiến cho chúng được áp dụng trong nhiều ứng dụng Thuật toán mật mã hóa khóa công khai được thiết kế đầu tiên bởi James
H Ellis, Clifford Cocks, và Malcolm Williamson tại GCHQ (Anh) vào đầu thập
Trang 30kỷ 1970 Thuật toán sau này được phát triển và biết đến dưới tên Diffie-Hellman,
và là một trường hợp đặc biệt của RSA Tuy nhiên những thông tin này chỉ được tiết lộ vào năm 1997
Năm 1976, Whitfield Diffie và Martin Hellman công bố một hệ thống mật
mã hóa khóa bất đối xứng trong đó nêu ra phương pháp trao đổi khóa công khai Công trình này chịu sự ảnh hưởng từ xuất bản trước đó của Ralph Merkle về phân phối khóa công khai Trao đổi khóa Diffie-Hellman là phương pháp có thể
áp dụng trên thực tế đầu tiên để phân phối khóa bí mật thông qua một kênh thông tin không an toàn Kỹ thuật thỏa thuận khóa của Merkle có tên là hệ thống câu đố Merkle
hoặc có thể tính toán từ khoá mã không mấy khó khăn, và ngược lại
Thuật toán mã hoá công khai sử dụng khoá để mã và khoá để giải là khác nhau Các khoá này tạo thành một cặp chuyển đổi ngược nhau Việc biết khoá mã
được công bố rộng dãi Khoá mã có thể công khai nhưng khoá giải phải được giữ
bí mật
Mặc dù khoá mã (khoá công khai) và khoá giải (khoá riêng) thực hiện các thao tác ngược nhau và do đó có liên quan đến nhau nhưng phải làm sao để không thể suy ra khoá riêng từ khoá công khai Yêu cầu đó có thể đạt được nhờ các hàm toán học đặc biệt gọi là các hàm sập bẫy một chiều (trapdoor one-way function) Các hàm này có đặc điểm là không thể chỉ dựa vào mô tả cả hàm mà còn phải biết được cách xây dựng hàm thì mới có thể suy ra được nghịch đảo của
nó
Trang 31Hạn chế của giải thuật khóa công khai :
Tốc độ xử lý :
nhiều so với các giải thuật đối xứng
– Không thích hợp cho mã hóa thông thường
– Thường dùng trao đổi khóa bí mật đầu phiên truyền tin
– Bất cứ ai cũng có thể tạo ra một khóa công bố đó là của một người khác
– Chừng nào việc giả mạo chưa bị phát hiện có thể đọc được nội dung các thông báo gửi cho người kia
– Cần đảm bảo những người đăng ký khóa là đáng tin
K1 (Khoá công khai)
DK2
Người nhận
B
P (Bản rõ)
Máy sinh khoá
Điều kiện khởi đầu Thám mã
K2 (Khoá bí mật)
Hình 3.1 Mã hoá công khai
Trang 32Một số thuật toán mã hóa khóa công khai được đánh giá cao:
Diffie-Hellman
DSS (Tiêu chuẩn chữ ký số)
ElGamal
Các kỹ thuật Mã hóa đường cong elliptic
Các kỹ thuật Thỏa thuật khóa chứng thực bằng mật khẩu
Hệ thống mật mã Paillier
Thuật toán mã hóa RSA
Các hệ mã hoá công khai này đều dựa trên cơ sở những vấn đề phức tạp thuộc lĩnh vực lý thuyết số, đó là các thuật toán số học được thực hiện trên các số nguyên tố rất lớn.
3.2 Hệ mã Ba Lô (MHK)
3.2.1 Tạo khoá
Hệ mật mã ba lô dựa trên sự khó giải của bài toán tổng các tập con
Tạo khoá của hệ mã ba lô theo các bước:
Bước 1: Tạo dãy siêu tăng S=(s1,s2,…,sn)
Bước 2: Chọn P (P>2*Sn)
Bước 3: Chọn a (a[1,p-1] và (p,a)=1)
Bước 4 : Tính khoá T =(t1,t2,…,tn)
Ti=a*simod P cuối cùng ta được khoá chung là T -> công bố
Khoá riêng là (S,P,a) -> bí mật
3.2.2 Mã hoá
Bước 1: Nhập bản rõ, tạo khoá
Bước 2: Đổi xâu bản rõ ra số
Bước 3: Đổi số sang dãy nhị phân Xi
Bước 3: Thực hiện mã hoá theo công thức
Trang 333.2.3 Giải mã
Bước 2: Chuyển C về một số nhị phân theo cách sau:
Và Xi = 0 Nếu C = 0 và Si = S1 thì bài toán có nghiệm
Nếu không bài toán vô nghiệm
Bước 3: Chuyển dãy nhị phân về số
Bước 4: Chuyển số sang xâu ta được bản rõ