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

Mã hóa với chữ kí điện tử

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.14 MB, 36 trang )






Mục lục:
Lời nói đầu ………………………………………………………………….…….2
Phần 1: Mã hóa và các vấn đề liên quan ………………………………….….…3
1.1 Khái niệm mã hóa dữ liệu …………………………………………….……....3
1.2 Hàm băm ……………………………………………………………….…….4
1.2.1 Hàm băm và chữ ký…………………………………………………………4
1.2.2 MD5 ……………………………………………………………….……......6
1.3 Thuật toán mã hóa khóa công khai RSA ……………………………….……13
1.3.1 Mô tả sơ lược ……………………………………………………………...13
1.3.2 Thuật toán RSA ………………………………………………….………...16
1.3.3 Tính bảo mật của giải thuật RSA ………………………………….………19
1.3.4 Các vấn đề đặt ra trong thực tế………………………………….………….20
Phần 2: Chữ ký điện tử và chương trình ứng dụng ……………………….….23
2.1 Khái niệm Chữ ký điện tử …………………...……………………….……...23
2.2 Cách thức hoạt động của chữ ký điện tử ………………...…………….…….26
2.2.1 Quá trình ký ………………………………………………………….…….28
2.2.2 Quá trình xác nhận chữ ký trên tài liệu ………………………….………...29
2.3 Chương trình ứng dụng ………………………….…………………….…….32
2.3.1 Giói thiệu chương trình ………………………………………….………...32
2.3.2 Một số hình ảnh của chương trình …………………………….…………..34
Kết luận …………………………………………………………………………36












Lời nói đầu:
Hiện nay, việc đảm bảo an toàn thông tin, tránh mọi nguy cơ bị thay đổi, sao chép
hoặc mất mát dữ liệu trong các ứng dụng trên mạng luôn là vấn đề bức xúc, được
nhiều người quan tâm. Trong bài báo này, em

trình bày những vấn đề liên quan về
mã hóa thông tin, thuật toán băm MD5, thuật toán mã hóa RSA và chữ ký điện tử.
Từ đó, ứng dụng thuật toán MD5 và RSA để phân tích quá trình hoạt động của chữ
ký điện tử. Trên cở sở đó, em đề ra giải pháp ứng dụng chữ ký điện tử trên cơ sở
kết hợp giữa thuật toán băm MD5 và thuật toán mã hóa RSA trong quá trình gửi và
nhận các tệp văn bản.
Trên thực tế, chữ ký điện tử (Digital Signature) đã được ứng dụng rộng rãi trong
các ứng dụng trên mạng. Một trong những ứng dụng quan trọng của chữ ký điện tử
là đảm bảo an toàn dữ liệu khi truyền trên mạng. Tuy nhiên, khi xây dựng một ứng
dụng, các nhà phát triển thường chỉ tập trung xây dựng các chức năng của hệ
thống, ít quan tâm đến vấn đề an toàn trong quá trình truyền tin.
Nhằm giải quyết vấn đề xử lý các giao dịch trao đổi văn bản trên mạng, đến nay
đã có nhiều giải pháp liên quan đến vấn đề mã hóa văn bản, nhưng em chọn và đề
xuất giải pháp ứng dụng chữ ký điện tử trên cơ sở kết hợp giữa thuật toán băm MD5
và thuật toán mã hóa RSA trong quá trình gửi và nhận tệp văn bản của hệ thống phần
mềm quản lý.
Bảo mật thông tin là lĩnh vực rất rộng, nên đây chỉ là bước khởi đầu để em tiếp tục
nghiên cứu và ứng dụng các thuật toán mã hóa trong việc xây dựng ứng dụng.
Trong bài báo này, em trình bày những n ội dung chính như sau: Đầu tiên em giới

thiệu một số vấn đề liên quan trong lĩnh vực mã hóa dữ liệu. Tiếp theo em tập trung
trình bày giải pháp ứng dụng chữ ký điện tử sử dụng MD5, RSA và đề ra cách thức
vận dụng, triển khai trong quá trình gửi và nhận tệp văn bản.
Trong báo cáo này do em chưa có đủ thời gian nghiên cứu sâu hơn nên còn nhiều
sai sót mong thày (cô) đóng góp ý kiến để chương trình của em được hoàn thiên hơn .




Thái Nguyên, tháng 11 năm 2010
Sinh viên thực hiện: Nguyễn Trọng Khiêm
Lớp : CNTT- K6B






Phần 1: MÃ HÓA VÀ CÁC VẤN ĐỀ LIÊN QUAN
1.1 Khái niệm mã hóa dữ liệu

Mã hóa dữ liệu là sử dụng một phương pháp biến đổi dữ liệu từ dạng bình thường
sang một dạng khác, mà một người không có thẩm quyền, không có phương tiện
giải mã thì không thể đọc hiểu được. Giải mã dữ liệu là quá trình ngược lại, là sử
dụng một phương pháp biến đổi dữ liệu đã được mã hóa về dạng thông tin ban đầu.

Hình 1:Quy trình mã hóa dữ liệu
Sau đây là một số khái niệm và kí hiệu liên quan về vấn đề mã hóa dữ liệu :

- Mã hóa (Encryption): Quá trình chuyển đổi dữ liệu gốc thành dữ liệu được mã

hóa sao người khác không thể đọc hiểu được (kí hiệu E);
- Giải mã (Decryption): Quá trình ngược lại của mã hóa, biến đổi dữ liệu đã được mã
hóa thành dạng gốc ban đầu (kí hiệu D);
- Thông điệp (Message), bản gốc (Plaintext): Tệp dữ liệu chưa mã hóa (kí hiệu M).
- Bản mã (Ciphertext): Tệp dữ liệu đã được mã hóa (kí hiệu C).
Theo quy ước, khi mã hóa thì C = E(M) và khi giải mã thì M = D(C) = D(E(M))

Theo phương pháp truy ền thống, người ta thường dùng cùng một khóa để
mã hóa và giải mã. Lúc đó, khóa phải được giữ bí mật tuyệt đối. Người ta gọi đây
là hệ thống mã hóa cổ điển (hay còn gọi là mã hóa đối xứng, một khóa, khóa bí
mật,...).
Một số phương pháp mã hóa theo hệ thống mã hóa cổ điển như :
- Mã dịch vòng
- Mã thay thế
- Mã Affine
- Mã Vigenère
- Mã Hill
- Các hệ mã dòng






Do độ phức tạp của các hệ mã cổ điển thấp, không đảm bảo cho dữ liệu truyền đi
trên internet được an toàn nên người ta nghiên cứu và phát triển một hệ thống mã hóa
mới an toàn hơn và vẫn được sử dụng rộng rãi là hệ mã DES. Phương pháp mã hóa
theo hệ thống mã hóa DES tới hiện nay vẫn được sử dụng rộng rãi trong các hệ thống
lớn do có độ an toàn khá cao.
Phương pháp khác sử dụng khóa công khai ( còn gọi là phương pháp mã hóa bất

đối xứng, hay hệ thống hai khóa) trong đó khóa để mã hóa và khóa để giải mã là
khác nhau. Các khóa này tạo thành một cặp chuyển đổi ngược nhau và không khóa
nào có thể suy ra được từ khóa kia. Phần tiếp theo của bài báo sẽ đề cập đến kỹ thuật
mã hóa này.
1.2 Hàm băm
1.2.1 Hàm băm và chữ ký:
Để kiểm tra tính toàn vẹn của một khối data lớn, người ta sử dụng chữ ký số để
đại diện cho khối data đó (giống như chữ ký trên văn bản) bằng cách dùng hàm băm: với
input là một message bất kỳ, output là một chuỗi bít có chiều dài xác định trước, chuỗi bít
này được gọi là message_digest.
1.2. Hashing – Hàm Băm
Hashing là một phương thức mật mã nhưng nó không phải là một thuật toán mã
hoá. Đúng như vậy, hashing chỉ sử dụng một chứng chỉ số duy nhất được biết đến với tên
như "hash value – giá trị hash", "hash – băm", Message Authentication Code (MAC),
fingerprint – vân tay, hay một đoạn message. Dữ liệu đầu vào của bạn có thể là một file,
một ổ đĩa một quá trình truyền thông tin trên mạng, hay một bức thư điện tử. Thông số
hash value được sử dụng để phát hiện khi có sự thay đổi của tài nguyên. Nói cách khác,
hashing sử dụng nó để phát hiện ra dữ liệu có toàn vẹn trong quá trình lưu trữ hay trong
khi truyền hay không.
Ví dụ, thông số hash value được tính toán để so sánh với thông số hash value
được tạo ra trước đó một tuần. Nếu hai thông số giống nhau thì dữ liệu chưa có sự thay
đổi. Nếu hai thông số có sự khác nhau, thì dữ liệu đã bị thay đổi. Trong hình dưới đây thể
hiện cơ bản về hash hay thông số MAC.
Thông số MAC value được tính toán bởi người gửi (sender) và người nhận
(receive) với cùng một thuật toán.










Hình 1: Thể hiện cơ bản về hash hay thông số MAC

Không như các phương thức mật mã khác, chúng sẽ làm thay đổi dữ liệu thành
một dạng mật mã, quá trình hashing sử dụng một thông số hash value và không thay đổi
dữ liệu ban đầu. Bởi vì các tính năng đặc biệt, hashing có thể sử dụng để bảo vệ và kiểm
tra tính toàn vẹn của dữ liệu. Nó cũng có khả năng sử dụng để kiểm tra khi có một tiến
trình copy được thực hiện và đảm bảo tính chính xác của dữ liệu khi chúng được copy.
Ví dụ, khi một ổ cứng được tạo ra một bản copy, một quá trình hash được thực
hiện trên ổ đĩa trước khi quá trình nhân đôi được thực hiện. Nếu hai thông số hash của ổ
cứng mới được tạo ra và thông số hash của ổ đĩa ban đầu thì quá trình nhân đôi dữ liệu
được thực hiện chính xác và đảm bảo dữ liệu không có sự thay đổi mất mát trong quá
trình nhân bản. Việc hashing sử dụng để đảm bảo dữ liệu được nguyên bản giúp dữ liệu
lưu ở dạng kỹ thuật số sẽ luôn dữ được nguyên bản sau vô số lần copy – và điều này
không thể thực hiện khi lưu dữ liệu các dạng khác – ví như lưu thông tin âm thanh bằng
băng từ sẽ bị biến dạng sau nhiều lần copy.
Ví dụ, Message Digest 5 (MD5) là một thuật toán hash với 128-bit hash. Điều này
có nghĩa không có vấn đề với dữ liệu đầu vào và dữ liệu đầu ra sau quá trình hash bởi nó
luôn luôn thêm vào 128 bits. Sức mạnh của quá trình hashing là nó được thực hiện một
chiều và không thể có phương thức nào có thể thực hiện ngược lại được để converts
thông số hash thành dữ liệu ban đầu. Nếu một vài người có được các thông số hash của
ta, họ không thể lấy được dữ liệu ban đầu. Tuy nhiên đó không phải là phương thức mật






mã không thể tấn công. Hashing có thể bị tấn công bởi các phương thức đảo ngược hay
birthday attack. Phương thức tấn công bình thường sử dụng đó là sử dụng các công cụ
password-cracking. Hầu hết các hệ thống lưu trữ passwords trong dữ liệu accounts và
được hashed (băm). Hashs không thể thực hiện ngược lại, bởi đó là một giải pháp bảo
mật, có nghĩa không có công cụ nào có thể chuyển ngược lại một password được hash
thành một password nguyên bản chưa được hash. Tuy nhiên một thuật toán nào cũng có
những bất cập riêng, bằng việc sử dụng các phần mềm, password crackers chúng có thể
phát hiện ra đoạn mã them vào dữ liệu ban đầu và chỉ cần xoá đoạn hash value đi là có
thể truy cập bình thường. Dữ liệu Account thường không được mã hoá, và dữ liệu
password thường được hash do đó hầu hết các công cụ crack password chỉ có thể xoá
password đã được đặt cho user đó mà không thể view password đó.

Thuật toán hashing thƣờng đƣợc sử dụng:

Secure Hash Algorithm (SHA-1) với - 160-bit hash value
Message Digest 5 (MD5) với —128-bit hash value
Message Digest 4 (MD4) với —128-bit hash value
Message Digest 2 (MD2) với —128-bit hash value


- Các tính chất cơ bản của hàm băm:
+ Là hàm một chiều, không thể thực hiện phép biến đổi ngược như trong quá trình
mã hóa và giải mã, nghĩa là với một message_digest cho trước, khó có thể tìm được
một message nào mà có hàm băm bằng message_digest này.
+ Khó có thể tìm được hai message mà có cùng một message_digest.
Các giải thuật băm được sử dụng hiện nay là: MD2, MD4, MD5, SHS. Trong đó MD5 là
giải thuật băm được sử dụng phổ biến và nó sẽ được trình bày trong phần dưới.
1.2.2 MD5
- Giải thuật MD5 được phát triển bởi Ron Rivest ở MIT: nhận đầu vào là một khối data
(message) có chiều dài bất kỳ, xử lý nó thành các khối 512 bít, tạo đầu ra là một

message_digest 128 bít. Quá trình bao gồm các bước sau:
* Bước 1: message ban đầu được thêm (padding) một số bít (bắt đầu là bít 1, kế tiếp
là các bít 0, số bít thêm vào từ 1 tới 512 bít) sao cho tổng số bít sau khi thêm vào cộng
với 64 (chiềi dài của message ban đầu) là bội số của 512.







Hình 2: Tạo message_digest sử dụng MD5.

* Bước 2: khởi tạo bộ đệm MD. Bộ đệm 128 bít được dùng để chứa kết quả trung
gian và cuối cùng của hàm băm. Có thể xem bộ đệm như là 4 thanh ghi 32 bít. Các thanh
ghi này được khởi tạo (dạng số hex) như sau:
A = 01234567; B = 89abcdef; C = fedcba98; D = 76543210
* Bước 3: xử lý message thành từng khối 512 bít (16 từ 32 bít). Quá trình tính
toán được chia thành từng giai đoạn, số giai đoạn bằng số chiều dài (tính theo bít) của
message sau khi đã padding chia cho 512. Mỗi giai đoạn nhận đầu vào là khối 512 bít của
message đã được padding và message_digest của giai đoạn trước, cho ra kết quả là
message_digest mới (xem hình 1). Mỗi giai đoạn thực hiện trong 4 bước (vòng), bốn
vòng có cấu trúc giống nhau nhưng mỗi vòng sử dụng một hàm luận lý khác nhau, được
đặc tả là F, G, H, I. Trong hình 2, bốn vòng được đặt nhãn là f
F
, f
G
, f
H
, f

I
, để chỉ rằng
mỗi vòng có cấu trúc hàm tổng quát như nhau nhưng tùy thuộc vào sự khác nhau của
hàm thao tác (F, G, H, I).







Hình 3: Xử lý MD5 của khối đơn 512 bít (HDMD5).

Mỗi vòng được thực hiện 16 bước tuần tự trên các data A, B, C, D (hình 3). Biểu thức
tính toán được sử dụng trong mỗi vòng có dạng:
a = b + CLS
s
(a + g(b,c,d) + X[k] + T[i]).









Trong đó:
. a, b, c, d: là 4 word A, B, C, D theo thứ tự nào đó.
. g: là một trong các hàm F, G, H, I.

F(b,c,d) = (b & c) | (~b & d)
G(b,c,d) = (b & d) | (c & ~d)
H(b,c,d) = b ^ c ^ d
I(b,c,d) = c ^ (b & ~d)
. CLS
s
: dịch vòng bên trái s bít.
. X[k] = M[q*16 + k] : từ 32 bít thứ k của khối 512 bít thứ q của message.
. T[i] = 2
32
* abs(sin(i)) : từ 32 bít thứ i (i tính theo radian) (xem bảng).
. Phép toán cộng (+) tính cho modulo 2
32


Hình 4: Tác vụ của MD5: [abcd k s i]






Bảng T được xây dựng từ hàm sin
T
1
= D76AA478 T
17
= F61E2562 T
33
= FFFA3942 T

49
= F4292244
T
2
= E8C7B756 T
18
= C040B340 T
34
= 8771F681 T
50
= 432AFF97
T
3
= 242070D8 T
19
= 265E5A51 T
35
= 69D96122 T
51
= AB9423A7
T
4
= C1BDCEEE T
20
= E9B6C7AA T
36
= FDE5380C T
52
= FC93A039
T

5
= F57C0FAF T
21
= D62F105D T
37
= A4BEEA44 T
53
= 655B59C3
T
6
= 4787C62A T
22
= 02441453 T
38
= 4BDECFA9 T
54
= 8F0CCC92
T
7
= A8304613 T
23
= D8A1E681 T
39
= F6BB4B60 T
55
= FFEFF47D
T
8
= FD469501 T
24

= E7D3FBC8 T
40
= BEBFBC70 T
56
= 85845DD1
T
9
= 698098D8 T
25
= 21E1CDE6 T
41
= 289B7EC6 T
57
= 6FA87E4F
T
10
= 8B44F7AF T
26
= C33707D6 T
42
= EAA127FA T
58
= FE2CE6E0
T
11
= FFFF5BB1 T
27
= F4D50D87 T
43
= D4EF3085 T

59
= A3014314
T
12
= 895CD7BE T
28
= 455A14ED T
44
= 04881D05 T
60
= 4E0811A1
T
13
= 6B901122 T
29
= A9E3E905 T
45
= D9D4D039 T
61
= F7537E82
T
14
= FD987193 T
30
= FCEFA3F8 T
46
= E6DB99E5 T
62
= BD3AF235
T

15
= A679438E T
31
= 676F02D9 T
47
= 1FA27CF8 T
63
= 2AD7D2BB
T
16
= 49B40281 T
32
= 8D2A4C8A T
48
= C4AC5665 T
64
= EB86D391












- Các tác vụ [abcd k s i] trong mỗi vòng là:



ABCD 0 7 1 1 5 17 5 4 33 0 6 49
DABC 1 12 2 6 9 18 8 11 34 7 10 50
CDAB 2 17 3 11 14 19 11 16 35 14 15 51
BCDA 3 22 4 0 20 20 14 23 36 5 21 52
ABCD 4 7 5 5 5 21 1 4 37 12 6 53
DABC 5 12 6 10 9 22 4 11 38 3 10 54
CDAB 6 17 7 15 14 23 7 16 39 10 15 55
BCDA 7 22 8 4 20 24 10 23 40 1 21 56
ABCD 8 7 9 9 5 25 13 4 41 8 6 57
DABC 9 12 10 14 9 26 0 11 42 15 10 58
CDAB 10 17 11 3 14 27 3 16 43 6 15 59
BCDA 11 22 12 8 20 28 6 23 44 13 21 60
ABCD 12 7 13 13 5 29 9 4 45 4 6 61
DABC 13 12 14 2 9 30 12 11 46 11 10 62
CDAB 14 17 15 7 14 31 15 16 47 2 15 63
BCDA 15 22 16 12 20 32 2 23 48 9 21 64




Vòng 1 Vòng 2 Vòng 3 Vòng 4





- Các phép toán dùng trong giải thuật MD5 gồm có:
+ Phép toán đối (~): bù bít.

+ Phép toán and (&): and các bít của hai toán hạng 32 bít với nhau.
+ Phép toán or (|): or các bít của hai toán hạng 32 bít với nhau.
+ Phép toán xor (^): xor các bít của hai toán hạng 32 bít với nhau.
+ Phép toán cộng (+): cộng modulo 2
32
hai toán hạng 32 bít với nhau.
+ Phép toán dịch trái vòng (w << s): dịch trái vòng w (32 bít) với s bít.
* Bước 4: xuất (output). Tất cả khối 512 bít L đã được xử lý thì đầu ra ở giai đoạn thứ
L là message_digest 128 bít.
Có thể tóm tắt hoạt động của MD5 như sau:
MD
0
= IV
MD
q+1
= MD
q
+ f
I
(Y
q
, f
H
(Y
q
, f
G
(Y
q
,f

F
(Y
q
,MD
q
))))
MD = MD
L-1

Trong đó:
+ IV: giá trị khởi tạo của bộ đệm ABCD

được xác định trong bước 2.
+ Y
q
: khối message 512 bít thứ q.
+ L: số khối message (đã được padding).
+ MD: giá trị message_digest cuối cùng.
// Mã hóa bằng thuật toán MD5
byte[] hash;
byte[] plainBytes = Encoding.Unicode.GetBytes(document);
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
hash = md5.ComputeHash(plainBytes);
md5.Clear();
//Kết thúc mã hóa MD5






1.3 Thuật toán mã hóa khóa công khai RSA:
Trong mật mã học, RSA là một thuật toán mã hóa khóa công cộng. Đây là thuật
toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh
dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng.
RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an
toàn với điều kiện độ dài khóa đủ lớn.
1.3.1 Mô tả sơ luợc:
Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật
(hay khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải
mã. Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa.
Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí
mật tương ứng. Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết
khóa cá nhân mới có thể giải mã được.
Một ví dụ trực quan: Bob muốn gửi cho Alice một thông tin mật mà Bob muốn
duy nhất Alice có thể đọc được. Để làm được điều này, Alice gửi cho Bob một chiếc hộp
có khóa đã mở và giữ lại chìa khóa. Bob nhận chiếc hộp, cho vào đó một tờ giấy viết thư
bình thường và khóa lại (lúc này ngay cả Bob cũng không thể đọc lại hay sửa thông tin
trong thư được nữa). Sau đó Bob gửi chiếc hộp lại cho Alice. Alice mở hộp với chìa khóa
của mình và đọc thông tin trong thư. Trong ví dụ này, chiếc hộp với khóa mở đóng vai
trò khóa công khai, chiếc chìa khóa chính là khóa bí mật.


Lịch sử cuộc cách mạng toán học mã RSA và chính phủ điện tử:
Khi phương pháp mã khóa công khai chưa ra đời, người ta sử dụng hầu như cùng
một 'chìa khóa' để mã hóa cũng như giải mã chung cho cả người gửi và người nhận
thông tin (hệ mã đối xứng). Với hệ mã này, một trong những khó khăn lớn của ngành an
ninh và mã hóa lúc đó là làm sao gửi an toàn chìa khóa bí mật trên các kênh truyền tin
công khai có nhiều người tham gia.







Hình: Ba nhà khoa học Shamir, Rivest và Adleman
Đầu năm 1969, James Ellis, một chuyên gia thám mã lỗi lạc của Cơ Quan
Truyền Thông Chính Phủ Anh Quốc (GCHQ) đã nảy ra ý tưởng đặc sắc rằng, nếu
người nhận tin đưa một nhiễu nào đó lên đường truyền công khai mà chỉ riêng anh ta
biết cách khử nhiễu, thì mọi thông tin mật gửi đến cho anh ta đều có thể đưa lên kênh
truyền tin công khai đó. Những người khác, dù bắt được tín hiệu cũng không thể nào
giải mã được tin mật.
Cuối năm 1969, James Ellis nhận ra ý tưởng trên có thể đạt được bằng 'hàm một
chiều' (xem phụ lục) Theo đó, chỉ có thể tìm hàm ngược nếu biết thông tin nào đó,
giống như khôi phục tín hiệu khi biết cái nhiễu do mình tạo ra. Nhưng ông không thực
hiện được điều này, do không biết liệu hàm một chiều có tồn tại hay không.
Bốn năm sau Clifford Cocks- một nhân viên mới của GCHQ- được Patterson,
thầy hướng dẫn, kể cho nghe ý tưởng độc đáo của James Ellis và ông đã tìm ra hàm một
chiều cần thiết chỉ trong vòng nửa giờ: đó chính là phép nhân! Nhân hai số nguyên tố
lớn bao nhiêu cũng được là điều hết sức dễ dàng, nhưng khi biết tích của chúng, để tìm
lại các thừa số thì ta cần phân tích số đã cho ra thừa số nguyên tố. Điều này hầu như
không thể làm được với các số đủ lớn. hật vậy, để phân tích n (=p*q) ra thừa số nguyên
tố, cần chia lần lượt n cho các số nguyên tố nhỏ hơn. Theo một định lý nổi tiếng trong
số học, có khoảng (n/log n) số nguyên tố bé hơn n. Nếu n có khoảng 300 chữ số thì sẽ
phải làm khoảng 10150/300 phép chia. (Nếu dùng máy tính tốc độ 1 tỷ phép tính/giây,
ta sẽ mất chừng...tỷ tỷ tỷ năm để phân tích số n!) Như vậy, hàm số thiết lập sự tương
ứng giữa hai số p, q với tích n=pq chính là hàm một chiều. Giải pháp thật đơn giản và
Cocks cũng không tự cảm nhận được đầy đủ ý nghĩa của kết quả đạt được. Kết quả của

×