MỤC LỤC
LỜI NÓI ĐẦU .............................................................................................................3
Chương 1 .....................................................................................................................4
LÝ THUYẾT CHUNG VỀ MÃ HOÁ ........................................................................4
1.1.Khái niệm mã hóa............................................................................................ 4
1.2.Lý thuyết mã hoá .............................................................................................. 4
1.2.1.Mã hoá dùng nguồn.....................................................................................5
1.2.2.Mã hoá trên kênh truyền..............................................................................5
1.3.Lý thuyết mật mã.............................................................................................. 6
1.3.1.Sự hình thành của khoa học mật mã ...........................................................7
1.3.2.Sự tiến triển của các hệ mật mã hiện đại .....................................................7
1.4.Các phương thức mã hoá cơ bản.................................................................... 11
1.5.Các chức năng băm nhỏ mã hoá .................................................................... 12
1.6.Các phương thức tạo nên khoá mã hoá ngẫu nhiên ...................................... 13
1.7.Sức mạnh của các thuật toán mã hoá............................................................. 14
1.8.Phá mã và phá mã một hệ thống .................................................................... 15
Chương 2. ..................................................................................................................19
TỔNG QUAN VỀ CÁC HỆ MÃ CƠ BẢN...............................................................19
2.1.Mã hoá công khai............................................................................................ 19
2.1.1.Khái niệm mã hoá công khai .....................................................................19
2.1.2.Ứng dụng của mã hoá công khai ...............................................................20
2.1.3.Độ an toàn..................................................................................................21
2.2.Thuật toán mã hoá RSA ................................................................................. 23
2.2.1.Giới thiệu thuật toán mã hoá RSA .............................................................23
2.2.2.Hoạt động...................................................................................................24
2.2.3.Ví dụ...........................................................................................................26
2.2.4.Quá trình chuyển đổi văn bản rõ ...............................................................27
2.2.5.An ninh ......................................................................................................28
2.3.Thuật toán mã hoá DES ................................................................................. 29
2.3.1.Giới thiệu về thuật toán DES .....................................................................29
2.3.2.Quy trình của thuật toán DES ...................................................................30
3.2.4.Cơ sở hạ tầng khoá công khai – PKI .........................................................52
3.2.5.Nhà quản lý đăng ký – RA .........................................................................53
3.2.6.Lợi ích của chứng chỉ số............................................................................53
3.3.Một số vấn đề đặt ra trong thực tế............................................................... ..56
3.3.1.Chọn mô hình nhà cung cấp chứng thực số (CA) .....................................56
3.3.2.Chữ ký điện tử theo phương án ký một lần hay ký hai lần ........................57
3.3.3.Cấp chữ ký số có giá trị như con dấu được hay không? ............................59
3.3.4.Vấn đề cơ sở hạ tầng cho giao dịch điện tử nói chung và chữ ký số nói
riêng……………………………………………………………………………….59
3.3.5.Sự đồng bộ .................................................................................................60
3.3.6.Vấn đề nhận thức của người sử dụng........................................................61
Chương 4 ...................................................................................................................62
CÁC KẾT QUẢ CÀI ĐẶT........................................................................................62
4.1.Ngôn ngữ sử dụng........................................................................................... 62
4.1.1.Nền tảng .Net .............................................................................................62
4.1.2.Ngôn ngữ C#..............................................................................................62
4.1.3.Giải thuật MD5 ..........................................................................................63
4.2.Dịch vụ truyền file .......................................................................................... 65
4.2.1.Giới thiệu ...................................................................................................65
4.2.2.Cơ sở lý thuyết............................................................................................66
4.2.3.Một số lệnh của FTP..................................................................................67
4.2.4.Một số ưu điểm của FTP............................................................................68
4.3.Giao diện chương trình................................................................................... 69
4.3.1.Giao diện chính của chương trình.............................................................69
4.3.2.Giao diện tạo khoá RSA.............................................................................70
4.3.3.Giao diện chương trình trước khi mã hoá tài liệu .....................................70
4.3.4.Giao diện chương trình sau khi mã hoá tài liệu ........................................71
4.3.5.Giao diện chương trình sau khi giải mã tài liệu ........................................71
4.3.6.Giao diện chương trình trước khi truyền file.............................................72
4.3.7.Giao diện chương trình sau khi truyền file................................................72
- Chương 2: Tổng quan về các hệ mã cơ bản
- Chương 3: Chữ ký điện tử và các vấn đề liên quan
- Chương 4: Các kết quả cài đặt
3
Chương 1
LÝ THUYẾT CHUNG VỀ MÃ HOÁ
1.1. Khái niệm mã hóa
Trong thực tế, một người muốn gửi thông điệp tới người nhận và không
muốn cho một người nào khác biết được nội dung của nó. Tuy nhiên sẽ xuất hiện
trường hợp một người thứ 3 có thể mở được thông điệp và đọc được nội dung
của nó.
Trong thuật ngữ mã hoá, thông điệp được gọi là plaintext hay cleartext
(tạm dịch là chữ thường). Mã hoá nội dung của thông điệp để che giấu đi nội
dung của nó được gọi là thuật mã hoá. Thông điệp đã được mã hoá gọi là văn bản
mã hoá (ciphertext). Quá trình lấy nội dung của ciphertext gọi là decryption (giải
mã). Mã hoá và giải mã thường sử dụng một key (chìa khoá) và phương thức mã
hoá mà quá trình giải mã chỉ có thể thực hiện được bởi người biết chìa khoá.
Thuật mã hoá là nghệ thuật hay khoa học để giữ cho thông điệp bí mật.
Phá mã là nghệ thuật lấy nội dung văn bản mã hoá mà không cần đến chìa khoá.
Người phá mã gọi là cryptographers và người mã hoá gọi là cryptanalysts.
Thuật mã hoá đi liền với các phương thức bảo mật thông tin, chứng thực,
chữ ký điện tử, tiền tệ điện tử và các ứng dụng khác. Cryptology là một nhánh
của toán học nghiên cứu về các phương thức mã hoá.
1.2. Lý thuyết mã hoá
Lý thuyết mã hóa (tiếng Anh: coding theory) là một ngành của toán học
(mathematics) và khoa học điện toán (computer science) nhằm giải quyết tình
giới hạn entrôpi của nguồn. C(x) H(x), trong đó H(x) là entrôpi của nguồn (tần
số bit), và C(x) là tần số bit sau khi số liệu đã được nén. Cụ thể là, không có
phương pháp mã hóa nguồn nào có thể tốt hơn giới hạn entrôpi của ký hiệu (the
entropy limit of the symbol).
1.2.2. Mã hoá trên kênh truyền
Mục đích của lý thuyết Mã hóa trên kênh truyền (channel encoding
theory) là tìm những mã có thể truyền thông nhanh chóng, chứa đựng nhiều mã
ký (code word) hợp lệ và có thể sửa lỗi (error correction) hoặc ít nhất phát hiện
5
các lỗi xảy ra (error detection). Các mục đích trên không phụ thuộc vào nhau, và
mỗi loại mã có công dụng tối ưu cho một ứng dụng riêng biệt. Những đặc tính
mà mỗi loại mã này cần còn tuỳ thuộc nhiều vào xác suất lỗi xảy ra trong quá
trình truyền thông.
Từ "Lý thuyết mã hóa đại số" ám chỉ để một chi nhánh của lý thuyết mã
hóa trên kênh truyền, trong đó đặc tính của mã được biểu hiện bằng các đại số và
dựa vào đó mà nghiên cứu sâu hơn.
Lý thuyết mã hóa đại số được chia ra làm hai loại mã chính
1. Mã khối tuyến tính (Linear block codes)
2. Mã kết hợp (Convolutional codes)
Chúng phân tích ba đặc tính sau của mã là:
Chiều
Tổng
dài của mã (code word length)
số các mã ký hợp lệ (total number of valid code words)
Khoảng
nhiên, con người tìm thấy niềm vui trong việc thiết kế những hệ mật mã cũng
như trong sự thách đố giải mã những thông tin được mã hoá bởi những người
khác.
Khoa học mật mã trong những năm gần đây trở nên quan trọng, được
quan tâm nghiên cứu và ứng dụng trên nhiều góc độ khác nhau do sự kiện là các
thông tin trên các mạng truyền dữ liệu công cộng thực sự có thể được mọi người
truy cập. Mật mã học hiện đại đã phát triển nhanh chóng, dựa trên những thành
tựu của lý thuyết thông tin, lý thuyết độ phức tạp tính toán, và đặc biệt là lý
thuyết số trong đó có những kết quả đã được thiết lập từ lâu, nay mới có cơ hội
ứng dụng trong thực hành. Cách đây không lâu, một số hệ mật mã tưởng như an
toàn đã bị phá vỡ và phải huỷ bỏ (chẳng hạn các mã ma trận tuyến tính và các
sách mã dựa trên một từ điển).
Ngày nay, khoa học mật mã đã được làm phong phú thêm với các phương
pháp rất an toàn, chắc chắn, được nhiều nhà toán học và tin học nổi tiếng tham
gia nghiên cứu, đã rời bỏ thế giới bí hiểm của những hoạt động tình báo, vượt
qua những thành luỹ của công nghiệp, của thương nghiệp, của tài chính, của
chiến lược chính trị và ngoại giao để thâm nhập mạnh mẽ vào những lĩnh vực
này.
1.3.2. Sự tiến triển của các hệ mật mã hiện đại
1.3.2.1.
Năm mươi năm phát triển
Những người đã xây dựng những kỹ thuật mã hoá hiện được dùng cho các
nhà tin học và cho sự an toàn của những dữ liệu của họ không phải là những
7
người, sau khi qua khỏi cuộc thế chiến thứ hai, đã có được nghệ thuật và kiến
Trong khi đó, thám báo là khoa học nghiên cứu các phương pháp giải mã để phá
các hệ mật và không gì có thể chứng minh tính an toàn của các hệ mật, là sản
8
phẩm của những người làm mật mã không chuyên, chừng nào mà các chuyên gia
trong lĩnh vực mật mã chưa tuyên bố gì về tính không thể bị phá của những hệ
đó.
Như đã biết, có hai cách chính để giữ cho một thông báo cần gửi đi khỏi
lọt vào tay kẻ thù:
- Ta có thể cất dấu, che dấu thông báo và hy vọng kẻ thù sẽ không tìm
thấy thông báo, và đó là sự che dấu thông báo (steganography). Thí dụ viết thông
báo bằng một loại mực không nhìn thấy. Người nhận sẽ đọc được thông báo bằng
cách cho tác dụng nhiệt hoặc hóa chất đó lên nó.
- Ta có thể xáo trộn thông báo và hy vọng rằng kẻ thù không có khả năng
sắp đặt lại nó về dạng ban đầu, và đó chính là mật mã (cryptography).
Đương nhiên che dấu thông tin và viết mật mã có thể được tổ hợp với
nhau: thông báo có thể được xáo trộn và sau đó được che dấu (cất dấu) để có
thêm an toàn.
Mặt khác, cũng cần biết là mật mã có mối liên hệ chặt chẽ với một bộ
phận của lý thuyết thông tin, cụ thể là lý thuyết mã hoá (coding theory). Lý
thuyết mã hoá bao gồm việc dịch thông tin thuộc loại bất kỳ (văn bản, dữ liệu
khoa học, hình ảnh, âm thanh, vv...) sang một dạng chuẩn cho việc truyền tin và
bảo vệ thông tin đó chống lại sự bóp méo do tiếng ồn ngẫu nhiên. Tuy nhiên, rõ
ràng có một sự khác nhau lớn giữa nhiễu gây bởi tiếng ồn ngẫu nhiên và nhiễu
gây bởi kẻ thù cố ý, và như vậy các kỹ thuật được sử dụng cũng hoàn toàn khác
nhau.
Theo truyền thống, hai bên cần liên lạc với nhau được gọi theo thứ tự là A
(Alice) và B (Bob), còn kẻ trộm tin cố gắng tìm cách đọc thông báo của họ là E
những thay thế của chúng.
Đương nhiên các loại mật mã nêu trên không hoàn toàn tách biệt nhau và
một số hoặc tất cả có thể được cùng dùng với nhau.
Cần lưu ý thêm là từ “mã” trong lý thuyết truyền tin được dùng với nhiều
nghĩa khác nhau. Thường nó có nghĩa là một lược đồ cho việc dịch thông tin từ
một khuôn dạng này sang một khuôn dạng khác. Chẳng hạn như mã Morse
(trước đây thường được dùng trong điện tín (telegraph) và liên lạc radio) sẽ dịch
từ “Code” thành một dãy gồm các dấu chấm và dấu gạch (thường đọc là tạch, tè)
10
Trong khi mã ASCII (được dùng trong truyền thông máy tính và biểu diễn
dữ liệu) sẽ dịch từ “Code” thành bốn số 67, 111, 100, 101, hay trong ký pháp nhị
phân là dãy: 1000011110111111001001100101
Trong khi đó, thuật ngữ “mật mã” được chúng ta hiểu là một hệ mật mã,
hoặc là bản mật mã, là kết quả của việc mã hoá một thông báo với việc sử dụng
một hệ mật.
Trong lý thuyết mật mã, một mã thay một số từ khoá trong thông báo bằng
những từ khác hay bằng những tổ hợp của các ký tự, như được xác định trong
sách mã. Điều này đôi khi đối lập với một hệ mật mã (cách viết bí mật - cipher)
lại thao tác trên các chữ hay các ký tự.
Ví dụ chúng ta hãy xét hệ mật Pig-Latin là một dạng đơn giản của hệ mật
chuyển dịch với các quy tắc lập mã sau:
Với các từ được bắt đầu với một phụ âm đơn, lấy phụ âm đó khỏi từ và
thêm nó vào cuối từ. Sau đó thêm ay vào sau phụ âm. Sau đây là một số thí dụ:
cat = atcay
dog = ogday
Với các từ bắt đầu với hai hoặc nhiều phụ âm, lấy nhóm phụ âm đó khỏi
từ và thêm chúng vào cuối từ. sau đó thêm ay vào cuối từ, ngay sau nhóm phụ
riêng (private) hay khoá bí mật (secret key).
Phương thức mã hóa hiện đại không còn sử dụng mã hoá bút và giấy. Các
phương thức mã hoá mạnh được thiết kế để thực thi bởi các máy tính hoặc các
thiết bị phần cứng đặc biệt. Trong hầu hết các phương thức mã hoá hiện đại, mã
hoá được thực hiện bởi các phần mềm.
Thông thường mã hoá đối xứng thực thi nhanh hơn trên các máy tính so
với mã hoá bất đối xứng. Trong thực tế chúng thường được sử dụng cùng nhau,
trong đó khoá public được sử dụng để tạo nên khoá mã hoá ngẫu nhiên, và khoá
ngẫu nhiên được dùng để mã hoá thông điệp thực sự sử dụng một thuật toán đối
xứng. Đây thường được gọi là mã hoá lai.
1.5. Các chức năng băm nhỏ mã hoá
Các chức năng băm nhỏ mã hoá được sử dụng trong nhiều trường hợp, ví
dụ như để tính toán trong việc sắp xếp các thông điệp khi tạo nên một chữ kí điện
tử. Một hàm băm đưa các bit của thông điệp thành một giá trị băm có giá trị cố
định. Một hàm băm sẽ làm cho việc tìm lại một thông điệp đã bị băm trở nên cực
kì khó khăn.
12
Các chức năng băm nhỏ thường tạo ra các giá trị băm 128 bit trỏ lên. Con
số 2 mũ 128 lớn hơn rất nhiều số lượng các thông điệp được trao đổi trên toàn
cầu. Lí do tại sao lại cần thiết hơn 128 bit dựa trên birthday paradox. Birthday
paradox chỉ ra rằng sự xắp xếp của 128 bit sẽ gấp đôi so với trường hợp mã hoá
64 bit. Việc bộ nhớ rẻ hơn khiến cho việc mã hoá lớn hơn 128 bit trở thành hiện
thực như 160 bit hiện nay.
Rất nhiều thuật băm nhỏ là miễn phí. Thuật băm nhỏ miễn phí nổi tiếng
nhất là họ MD, như MD4 và MD5. MD4 đã bị phá và MD5 mặc dù đang được
dùng rộng rãi, cũng sẽ bị phá. SHA-1 và RipeMD-160 là những ví dụ tốt khi bạn
muốn nghiên cứu về mã hoá.
pool). Trong một chế độ mà mỗi bit của pool phụ thuốc vào mọi bit của pool.
Một nhiễu môi trường được trộn lẫn vào pool để đảm bảo việc đoán giá trị trước
hoặc sau sau khi đã trộn sẽ trở nên khó thành hiện thực.
Mặc dù thuật toán tạo số mã hoá ngẫu nhiên mạnh không phải là khó tạo
nên nhưng thường là bị xem nhẹ và nếu như nó được thiết kế tồi thì sẽ trở thành
điểm yếu đánh chú ý của hệ thống.
1.7. Sức mạnh của các thuật toán mã hoá
Các hệ thống mã hoá tốt luôn luôn được thiết kế để càng khó bẻ gẫy càng
tốt. Trong thực tế có thể xây dựng nên một hệ thống không thể phá vỡ (mặc dù
nó không được phát triển). Sự quan tâm và trình độ luôn phải được chú ý tới.
Mọi kĩ sư cần phải hiểu rõ được các khái niệm về bảo mật và được đào tạo.
Theo lý thuyết, một phương thức mã hoá với một khoá có thể bị bẻ bởi
việc thử mọi khoá theo tuần tự.Nếu sử dụng cách bẻ khoá hàng loạt để thử mọi
khoá, thì sự tính toán tăng lên nhiều lần theo sự tăng lên của độ dài khoá. Một
khoá 32 bit đòi hỏi 2 mũ 32 (khoảng 10 mũ 9) bước thử. Điều này có thể được
thực hiện tại một máy tính cá nhân. Một khoá 40 bit đòi hỏi một máy tính cá
nhân thử trong một tuần lẽ. Một hệ thống mã hoá 56 bit (như DES) đòi hỏi nhiều
máy tính cá nhân hợp tác trong vòng vài tháng nhưng có thể dễ dàng phá bởi một
thiết bị phần cứng đặc biệt. Giá của phần cứng này có thể chấp nhận được đối với
một tổ chức tội phạm, một công ty hàng đầu hay một chính phủ. Khoá 64 bit hiện
nay có thể phá bởi một chính phủ. Khoá 80 bit sẽ bị phá trong vòng vài năm tới,
khoá 128 bit sẽ an toàn trong một tương lai gần. Những khoá lớn hơn vẫn có thể
được dùng hiện nay.
14
Tuy nhiên độ dài khoá không phải là yếu tố duy nhất. Nhiều mã hoá có thể
bị phá không bằng cách thử mọi khả năng (brute force). Nói chung, rất khó để
thiết kế một thuật mã hoá mà không thể bị bẻ. Tự thiết kế một thuật mã hoá của
thường có thể đoán được nội dung của văn bản thô, vì nhiều loại thông điệp có
dạng trường đầu đề cố định. Ngay cả những từ gốc và các tài liệu bắt đầu theo
một cách có thể đoán được. Ví dụ rất nhiều kiểu tấn công cổ điển sử dụng việc
đánh giá tần số xuất hiện của các kí tự mã hoá, tuy nhiên cách này khó hữu dụng
đối với các thuật mã hoá hiện đại.
Các hệ thống mã hoá hiện đại không có điểm yếu đối với kiểu tấn công này,
mặc dù đôi khi chúng có thể có một khuynh hướng tĩnh nào đó.
- Kiểu tấn công know-plaintext: Kẻ tấn công biết hoặc có thể đoán được văn
bản thô trong một vài phần của văn bản mã hoá. Sau đó sẽ giải mã phần còn lại
dựa trên thông tin này. Thực hiện bằng cách xem xét khoá sử dụng để mã hoá dữ
liệu hoặc thông qua các shorcut.
Một trong những cách tấn công know-plaintext nổi tiếng nhất là phương
pháp chia tuyến các khối mã hoá.
- Phương pháp chọn văn bản thô: Kẻ tấn công có khả có được mọi văn bản
anh ta muốn mã hoá với một khoá chưa biết. Anh ta sẽ quyết định khoá sử dụng
mã hoá.
Kiểu tấn công này rất nguy hiểm đối với một vài hệ thống, ví dụ như RSA ,
khi những thuật toán này được dùng, cần rất cẩn trọng để văn bản thô.
- Kiểu tấn công man-in-the-middle (kẻ trung gian): Kiểu tấn công này liên
hệ đến giao thức trao đổi khoá và truyền thông mã hoá. Khi 2 nhóm, A và B trao
đổi khoá để bảo mật quá trình trao đổi thông tin (ví dụ sử dụng Diffie-Helllman),
một đối thủ sẽ tự đưa anh ta vào A và B. Anh ta bắt các tín hiệu A và B trao đổi
với nhau và tạo nên một khóa trao đổi cho A và B riêng rẽ. A và B sử dụng các
khoá riêng rẽ này, mỗi khoá đều được biết bởi kẻ tấn công. Kẻ tấn công có thể
giải mã mọi thông điệp từ A và gửi tới B bằng cách mã hoá nó lần nữa với khoá
mà hắn trao đổi với B. Cả A và B đều tin rằng họ đang truyền thông một cách
bảo mật nhưng thực tế là kẻ tấn công đang nghe được tất cả.
- Cách thông thường để ngăn chặn kiểu tấn công man-in-the-middle là sử
dụng một khoá public có khả năng cung cấp chữ kí điện tử. Để thiết lập, các bên
trên mọi loại thiết bị có chế độ bảo vệ lỏng lẻo.
Các thông tin thêm về kiểu tấn công này các bạn có thể tìm hiểu thêm tại
.
- Các lỗi trong hệ thống mã hoá có thể dẫn tới việc tay bẻ khoá có thể tìm ra
được khoá bí mật. Điều thú vị trong các thiết bị mã hoá dẫn tới một vài thuật toán
17
trở nên sai lệch với sự xuất hiện của những lỗi nhỏ trong cấu trúc tính toán bên
trong.
Ví dụ sự thực thi của khoá bí mật RSA rất nhậy cảm với lỗi. Dù chỉ một lỗi
nhỏ trong quá trình tính toán cũng sẽ dẫn tới việc lộ khoá bí mật.
- Máy tính lượng tử: Những nghiên cứu của Peter Shor trong các chuỗi định
thời và các thuật toán loga với máy tính lượng tử đã dẫn tới sự tăng chú ý trong
tính toán lượng tử. Máy tính lượng tử trong những nghiên cứu gần đây cho thấy
sức mạnh rất lớn của nó so với các máy tính hiện nay. Sức mạnh này nhận được
từ cấu trúc tính toán song song do đó thay vì chỉ thực hiện một tính toán tại một
thời điểm nó có thể thực thi nhiều tính toán cùng lúc.
Những nghiên cứu của Shor cho thấy sự đi vào lịch sử của các khoá mã hoá
public tuy nhiên với trường hợp của các khoá private thì sự hiệu quả không cao.
Tính toán lượng tử cũng hứa hẹn nhiều về bảo mật và che giấu dữ liệu tuy
nhiên nó vẫn đang trên đường thu hút sự chú ý hơn là được ứng dụng trong các
application.
- Mã hoá DNA: Với cấu trúc tính toán song song mã hoá DNA đòi hỏi
những tính toán rất lớn trong việc bẻ khoá. Cấu trúc song song tự nhiên khiến
tính toán DNA đòi hỏi một tốc độ tính toán cực cao mà các máy tính serial hiện
nay khó lòng thực hiện nổi.
Một vấn đề đặt ra là mã hoá DNA cũng đòi hỏi tính toán lớn do đó nó tiêu
tốn không ít tài nguyên của hệ thống vận hành.
giữa hai bên.
Thông thường, các kỹ thuật mật mã hoá khoá công khai đòi hỏi khối lượng
tính toán nhiều hơn các kỹ thuật mã hoá khoá đố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.
19
2.1.2. Ứng dụng của mã hoá công khai
Ứng dụng rõ ràng nhất của mật mã hoá công khai là bảo mật: một văn bản
được mã hoá bằng khoá công khai của một người sử dụng thì chỉ có thể giải mã
với khóa bí mật của người đó.
Chọn một số ngẫu nhiên lớn để sinh cặp khóa
Dùng khoá công khai để mã hóa, nhưng dùng khoá bí mật để giải mã
Các thuật toán tạo chữ ký số khoá công khai có thể dùng để nhận thức. Một
người sử dụng có thể mã hoá văn bản với khoá bí mật của mình. Nếu một người
khác có thể giải mã với khoá công khai của người gửi thì có thể tin rằng văn bản
thực sự xuất phát từ người gắn với khoá công khai đó.
20
Dùng khoá bí mật để ký một thông báo, dùng khoá công khai để xác minh
chữ ký
Các đặc điểm trên còn có ích cho nhiều ứng dụng khác như: tiền điện tử,
thoả thuận khoá.
Tổ hợp khoá bí mật mình với khoá bí mật của người khác tạo ra khoá dùng
tấn công dạng kẻ tấn công đứng giữa (man in the middle attack): kẻ tấn công lợi
dụng việc phân phối khoá công khai để thay đổi khoá công khai. Sau khi đã giả
mạo được khoá công khai, kẻ tấn công đứng ở giữa hai bên để nhận các gói tin,
giải mã rồi lại mã hoá với khoá đúng và gửi đến nơi nhận để tránh bị phát hiện.
Dạng tấn công kiểu này có thể phòng ngừa bằng các phương pháp trao đổi khoá
an toàn nhằm đảm bảo nhận thức người gửi và toàn vẹn thông tin. Một điều cần
lưu ý là khi chính phủ quan tâm đến dạng tấn công này: họ có thể thuyết phục
(hay bắt buộc) nhà cung cấp chứng thực số xác nhận một khoá giả mạo và có thể
đọc các thông tin mã hoá.
22
2.2. Thuật toán mã hoá RSA
2.2.1. Giới thiệu thuật toán mã hoá RSA
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên
vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán
lấy từ 3 chữ cái đầu của tên 3 tác giả.
Trước đó, vào năm 1973, Clifford Cocks, một nhà toán học người Anh làm
việc tại GCHQ, đã mô tả một thuật toán tương tự. Với khả năng tính toán tại thời
điểm đó thì thuật toán này không khả thi và chưa bao giờ được thực nghiệm. Tuy
nhiên, phát minh này chỉ được công bố vào năm 1977 vì được xếp vào loại tuyệt
mật.
Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983
(Số đăng ký 4,405,829). Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm
2000. Tuy nhiên, do thuật toán đã được công bố trước khi có đăng ký bảo hộ nên
sự bảo hộ hầu như không có giá trị bên ngoài Hoa Kỳ. Ngoài ra, nếu như công
trình của Clifford Cocks đã được công bố trước đó thì bằng sáng chế RSA đã
không thể được đăng ký.
Thuật toán RSA có hai khoá: khóa công khai (hay khoá công cộng) và khoá
toàn (ví dụ như internet). Với thuật toán RSA, A đầu tiên cần tạo ra cho mình cặp
khoá gồm khoá công khai và khoá bí mật theo các bước sau:
1. Chọn 2 số nguyên tố lớn p và q với p q, lựa chọn ngẫu nhiên và độc lập.
2. Tính: n = pq.
3. Tính: giá trị hàm số Ơle (n) = (p-1)(q-1).
4. Chọn một số tự nhiên e sao cho 1 < e < (n) và là số nguyên tố cùng nhau
với (n).
5. Tính: d sao cho de 1 (mod (n)) .
Một số lưu ý:
Các
số nguyên tố thường được chọn bằng phương pháp thử xác suất.
Các
bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng (xem
thêm: số học môđun).
Bước
d =
5 có thể viết cách khác: Tìm số tự nhiên x sao cho
x( p 1)(q 1) 1
cũng là số tự nhiên. Khi đó sử dụng giá trị
e
d mod (p-1)(q-1).
Từ bước 3, PKCS#1 v2.1 sử dụng
mod p (thường được gọi là iqmp)
Dạng này cho phép thực hiện giải mã và ký nhanh hơn với việc sử dụng
định lý số dư Trung Quốc (tiếng Anh: Chinese Remainder Theorem - CRT). Ở
dạng này, tất cả thành phần của khóa bí mật phải được giữ bí mật.
A gửi khóa công khai cho B, và giữ bí mật khóa cá nhân của mình. Ở đây,
p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính d
khi biết e. Nếu không sử dụng dạng sau của khóa bí mật (dạng CRT) thì p và q sẽ
được xóa ngay sau khi thực hiện xong quá trình tạo khóa.
2.2.2.2.
Quá trình mã hoá
Giả sử B muốn gửi đoạn thông tin M cho A. Đầu tiên B chuyển M thành một
số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M) được thoả
thuận trước. Quá trình này được mô tả ở phần chuyển đổi văn bản rõ.
Lúc này B có m và biết n cũng như e do A gửi, B sẽ tính c là bản mã hoá của
m theo công thức:
C = me mod n
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo
mođun) bằng thuật toán bình phương và nhân. Cuối cùng B gửi c cho A.
2.2.2.3.
Quá trình giải mã
A nhận c từ B và biết khoá bí mật d. A có thể tìm được m từ c theo công
thức sau:
m = cd mod n
Biết m, A tìm lại M theo phương pháp đã thoả thuận trước. Quá trình giải