Các nhà tạo mã đã sớm nhận ra rằng, mật mã máy phức tạp khôngphải là cách thức gửi thư an toàn nhất, điều đó đã thúc đẩy việc tạo thêm một số mã mới với tính bảo mật cao hơn, làm tiền đề
Trang 1TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO
AN TOÀN THÔNG TIN
Đề tài: Hệ mật mã hóa RSA
I Giới thiệu về mật mã
GV hướng dẫn : NGUYỄN VĂN HOÀNG
Nhóm sinh viên: DƯƠNG THỊ BÍCH PHƯỢNG
ĐỖ THỊ NGỌC BÍCH Lớp : THC – K52
Trang 2Ngày nay, các ứng dụng công nghệ thông tin ngày càng phổbiến rộng rãi đã ảnh hưởng rất lớn đến diện mạo của đời sống, kinh tế, xãhội Mọi công việc hàng ngày của chúng ta đều có thể thực hiện được từ xavới sự hỗ trợ của máy vi tính và mạng internet (từ việc học tập, đi mua sắm,gửi thư…) Tất cả thông tin liên quan đến những công việc này đều do máy
vi tính quản lý và truyền đi trên hệ thống mạng Đối với những thông tinbình thường thì không có ai chú ý đến nhưng đối với những thông tin mangtính chất sống còn đối với một số cá nhân (hay tổ chức) thì vấn đề bảo mậtthật sự rất quan trọng
Mật mã học ra đời, là một ngành quan trọng và có nhiều ứng dụngtrong đời sống Các ứng dụng mã hóa và bảo mật thông tin đang được sửdụng ngày càng phổ biến hơn trong các lĩnh vực khác nhau trên thế giới, từcác lĩnh vực an ninh, quân sự, quốc phòng…cho đến các lĩnh vực dân sự nhưthương mại điện tử, ngân hàng…Cùng với sự phát triển của tin học, ngànhmật mã ngày càng trở nên quan trọng Với mong muốn hiểu rõ cách thức gửicông khai mà vẫn giữ được tính bí mật của bức thư, trong nội dung bài báo
cáo, chúng em xin tìm hiểu đề tài “Hệ mật mã hóa RSA”.
1 Lịch sử phát triển
Mật mã học là một ngành có lịch sử từ hàng nghìn năm nay Trong
Trang 3phầ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ã học 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ỷ XX, 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ủangành điện tử và máy tính trong những thập kỷ gần đây đã 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
2 Một số loại mật mã
Những bằng chứng sớm nhất về sử dụng mật mã học là các chữ tượnghình không tiêu chuẩn tìm thấy trên các bức tượng Ai Cập cổ đại (cách đâykhoảng 4500) Những ký hiệu tỏ ra không phải để phục vụ mục đích truyềnthông tin bí mật mà có vẻ như là nhằm mục đích gợi nên những điều thần bí,trí tò mò hoặc thậm chí để tạo sự thích thú cho người xem
Có người cho rằng, người đầu tiên áp dụng mật mã chính là nhà quân
sự thiên tài của La Mã cổ đại, Julius Caesar Mật mã này được dùng tronghoạt động quân sự Đó chính là mã Caesar, ông thay thế một cách đơn giảntừng chữ cái trong thư bằng chữ cái cách nó 3 vị trí trong bảng chữ cái Saunày được gọi là mã dịch chuyển Caesar, một hình thức của mã thế, làm nềntảng cho các hệ mã phức tạp sau này
Trong thời kì phục hưng khoa học mật mã ở Châu Âu thực sự pháttriển Sự xuất hiện và phát triển của phương pháp phân tích mã ở Châu Âu
đã đẩy các nhà giải mã lên ngôi Các nhà lập mã buộc phải lao vào cuộc tìmkiếm những mã mới: playfair cipher, hill cipher…
Blaise de Vigenère (1523-1596) là một nhà ngoại giao người Pháp đãhoàn thiện ý tưởng mã hóa nhiều bảng mã, mật mã này được gọi là mãVigenère Điểm mạnh của mã Vigenère là sử dụng tới 26 bảng mã khác
Trang 4nhau Do đó mà nó không bị phá trong một thời gian dài Tuy nhiên năm
1863 ông Kasiski đã công phá thành công bằng kỹ thuật tấn công thống kê
Trong thế chiến thứ II, những máy mã hóa dạng Enigma đã được sửdụng để vận chuyển các thông tin quân sự bí mật Sau đó mã này cũng bịtrung tâm giải mã ở Bletchley Park công phá
Các nhà tạo mã đã sớm nhận ra rằng, mật mã máy phức tạp khôngphải là cách thức gửi thư an toàn nhất, điều đó đã thúc đẩy việc tạo thêm một
số mã mới với tính bảo mật cao hơn, làm tiền đề xây dựng nên hệ mật mãkhóa công khai
3 Hệ mật mã công khai
Mã hóa khóa công khai là một dạng mã hóa cho phép người sử dụngtrao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mậttrướ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 Một hệ mã khóa công khai sử dụng hai loại khóa:
- Khóa công khai (public key) được công bố rộng rãi và được sử dụngtrong việc mã hóa
- Khóa riêng (private key) chỉ do một người nắm giữ và được sử dụng
để giải mã thông tin đã được mã hóa bằng khóa công khai
Các phương pháp mã hóa này khai thác những ánh xạ f mà việc thực hiện ánh xạ ngược f –1 rất khó so với việc thực hiện ánh xạ f Chỉ khi biết được khóa riêng K thì mới có thể thực hiện được ánh xạ ngược f –1
Tính an toàn của mã hóa khoá công khai phụ thuộc vào tính khó củanhững vấn đề tính toán và dựa trên số lượng khóa tiềm năng Thuật toán mãhóa khóa công khai thường phải thao tác trên các con số khá lớn để đảm bảovấn đề tính toán có độ khó đủ để không có lời giải khả thi Cũng chính vìvậy các thuật toán mã hóa khóa công khai thường chạy chậm
Hệ thống mã hóa khóa công khai có thể sử dụng với các mục đích:
Trang 5- 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
II Hệ mã RSA
Trong mật mã học, RSA là một thuật toán mật mã hóa khóa công
khai Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồngthờ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.
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êncủ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ườiAnh làm việc tại GCHQ, đã mô tả một thuật toán tương tự Với khả năngtí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
1997 vì được xếp vào loại tuyệt mật
Trang 6Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vàonăm 1983 (Số đăng ký 4,405,829) Bằng sáng chế này hết hạn vào ngày 21thá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ý.
Đến năm 2002, ba tác giả của hệ mật mã RSA được trao tặng giảithưởng Turing, giải thưởng cao nhất của Tin học, đánh dấu sự thừa nhậnchính thức của giới Tin học đối với RSA
Đội ngũ RSA tại lề nhận Giải thưởng Turing năm 2003
Từ trái: Ron Rivest, Adi Shamir vad Len Adleman
1 Mô tả sơ lượ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 trongquá trình mã hóa và giải mã Khóa công khai được công bố rộng rãi cho mọingười và được dùng để mã hóa Những thông tin được mã hóa bằng khóacông khai chỉ có thể được giải mã bằng khóa bí mật tương ứng Nói cáchkhác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí
Trang 7mật) mới có thể giải mã được.
Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai nhưsau : Bob muốn gửi cho Alice một thông tin mật mà Bob muốn duy nhấtAlice có thể đọc được Để làm được điều này, Alice gửi cho Bob một chiếchộp có khóa đã mở sẵn 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 (như loại khoá thông thường chỉcần sập chốt lại, sau khi sập chốt khóa ngay cả Bob cũng không thể mở lạiđược - không đọc lại hay sửa thông tin trong thư được nữa) Sau đó Bob gửichiếc hộp lại cho Alice Alice mở hộp với chìa khóa của mình và đọc thôngtin trong thư Trong ví dụ này, chiếc hộp với khóa mở đóng vai trò khóacông khai, chiếc chìa khóa chính là khóa bí mật
5 Tính số nguyên d sao cho: 1<d<(n) và d*e ≡1 (mod (n))
Alice gửi khóa công khai cho Bob, 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
Trang 8và cho phép tính d khi biết e Publickey là {e,n} và Privatekey là {d,n} hoặc
{d,p,q}
3 Mã hóa
Giả sử Bob muốn gửi đoạn thông tin M cho Alice Đầu tiên Bob 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 thỏa thuận trước Lúc này Bob có m và biết n cũng như
e do Alice gửi Bob sẽ tính c là bản mã hóa 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
môđun) bằng (thuật toán bình phương và nhân) Cuối cùng Bob gửi c cho
Alice
4 Giải mã
Alice nhận c từ Bob và biết khóa bí mật d Alice có thể tìm được m từ
c theo công thức sau:
m=cd mod n
Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước Quá trình giải
mã hoạt động vì ta có e*d đồng dư với 1 modul (n) do vậy ta cóe*d=1+k*(n)
Khi đó nếu gcd(m,p)=1 thì theo định lý Fermat ta sẽ có: mp-1
đồng dư với 1 modul p vậy thì: m1+k(p-1)(q-1) ≡m (mod p) => med≡m (mod p)
Nếu gcd(m,p)=p thì med≡m (mod p)
Trang 9Tương tự ta chứng minh được med≡m (mod q).
Cuối cùng do p,q là 2 số nguyên tố phân biệt nên ta có med≡m (modn) Vậy cd = (me)d ≡m (mod n) Tức m = (me)d mod n = cd mod n
Ví dụ: Ở đây chúng ta sử dụng những số nhỏ để tiện tính toán còntrong thực tế phải dùng các số có giá trị đủ lớn
Khóa công khai là cặp (e, n) Khóa bí mật là d Hàm mã hóa là:
encrypt(m) = m e mod n = m17 mod 3233
với m là văn bản rõ Hàm giải mã là:
decrypt(c) = c d mod n = c2753 mod 3233
Trang 105 Chuyển đổi văn bản rõ
Trước khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi vănbản rõ (chuyển đổi từ M sang m) sao cho không có giá trị nào của M tạo ravăn bản mã không an toàn Nếu không có quá trình này, RSA sẽ gặp phảimột số vấn đề sau:
Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1tương ứng
Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giátrị nhỏ, giá trị me cũng nhận giá trị nhỏ (so với n) Như vậy phép môđunkhông có tác dụng và có thể dễ dàng tìm được m bằng cách khai căn bậc ecủa c (bỏ qua môđun)
RSA là phương pháp mã hóa xác định (không có thành phầnngẫu nhiên) nên kẻ tấn công có thể thực hiện tấn công lựa chọn bản rõ bằngcách tạo ra một bảng tra giữa bản rõ và bản mã Khi gặp một bản mã, kẻ tấncông sử dụng bảng tra để tìm ra bản rõ tương ứng
Trên thực tế, ta thường gặp 2 vấn đề đầu khi gửi các bản tin ASCIIngắn với m là nhóm vài ký tự ASCII Một đoạn tin chỉ có 1 ký tự NUL sẽđược gán giá trị m = 0 và cho ra bản mã là 0 bất kể giá trị của e và N Tương
tự, một ký tự ASCII khác, có giá trị 1 sẽ luôn cho ra bản mã là 1 Với các hệthống dùng giá trị e nhỏ thì tất cả ký tự ASCII đều cho kết quả mã hóakhông an toàn vì giá trị lớn nhất của m chỉ là 255 và 2553 nhỏ hơn giá trị nchấp nhận được Những bản mã này sẽ dễ dàng bị phá mã
Để tránh gặp phải những vấn đề trên, RSA trên thực tế thường baogồm một hình thức chuyển đổi ngẫu nhiên hóa m trước khi mã hóa Quátrình chuyển đổi này phải đảm bảo rằng m không rơi vào các giá trị không
an toàn Sau khi chuyển đổi, mỗi bản rõ khi mã hóa sẽ cho ra một trong sốkhả năng trong tập hợp bản mã Điều này làm giảm tính khả thi của phương
Trang 11pháp tấn công lựa chọn bản rõ (một bản rõ sẽ có thể tương ứng với nhiềubản mã tuỳ thuộc vào cách chuyển đổi).
Một số tiêu chuẩn, chẳng hạn như PKCS, đã được thiết kế để chuyểnđổi bản rõ trước khi mã hóa bằng RSA Các phương pháp chuyển đổi này bổsung thêm bít vào M Các phương pháp chuyển đổi cần được thiết kế cẩnthận để tránh những dạng tấn công phức tạp tận dụng khả năng biết trướcđược cấu trúc của bản rõ Phiên bản ban đầu của PKCS dùng một phươngpháp đặc ứng (ad-hoc) mà về sau được biết là không an toàn trước tấn cônglựa chọn bản rõ thích ứng (adaptive chosen ciphertext attack) Các phươngpháp chuyển đổi hiện đại sử dụng các kỹ thuật như chuyển đổi mã hóa bấtđối xứng tối ưu (Optimal Asymmetric Encryption Padding - OAEP) đểchống lại tấn công dạng này Tiêu chuẩn PKCS còn được bổ sung các tínhnăng khác để đảm bảo an toàn cho chữ ký RSA (Probabilistic SignatureScheme for RSA - RSA-PSS)
III Một số vấn đề xung quanh thuật toán RSA
Nếu chọn m chỉ là một số nguyên tố thôi thì người ta sẽ dễ dàngtìm được Φ(n) = n-1
Nếu đặt như vậy thì n chỉ có thể phân tích thành tích của hai sốnguyên tố rất lớn
Khi ta chọn p va q là các số nguyên tố khoảng 100 chữ số thì với
Trang 12những máy tính nhanh nhất hiện nay, để phân tích được n cũng phải mấthàng tỷ năm Vấn đề đặt ra ở đây là giải quyết bài toán: làm thế nào để kiểm
tra một cách nhanh chóng và chính xác một số nguyên dương n là số nguyên
tố hay hợp số?
Tiếp theo là việc chọn giá trị e và cách nhóm từng khối chữ số Với P
là một khối đã được nhóm, P là một số có tối thiểu 2 chữ số Khi mã hóa P tađược C ≡ P^e (mod n) Nếu P^e < n thì C = P^e (với e công khai) Như vậy
để giải mã, ta chỉ cần tính căn bậc e của C (tính theo cách thông thường)
Vì vậy khi đã có n, ta phải chọn e sao cho 2 ^ e > n (=> P^e > n với mọi P)
Cũng vì lý do đó, ta cũng nên chọn cách nhóm sao cho P đủ lớn Nhưng P không được vượt quá n vì nếu P > n thì:
Khi giải mã một khối C : ta có D(C) ≡ P(mod n) ≡ P1 (mod n) (với P1
< n < P) Ta không tìm được giá trị P ban đầu
Tóm lại, chúng ta nên chọn n là tích của hai số nguyên tố rất lớn p và
q, e là số nguyên tố tùy ý lớn hơn p và q Nhất thiết phải chọn e thỏa điềukiện 2^e >n Đối với các chữ số trong văn bản đầu, ta nhóm lại thành từngkhối P có độ dài đủ lớn và P không được vượt quá n Một điểm nữa cần nhấnmạnh là khóa bí mật d cũng phải đủ lớn, nếu không RSA trở lên không antoàn
3 Đánh giá về an toàn của thuật toán RSA
Tính chất an toàn của phương pháp RSA dựa trên cơ sở chi phí choviệc giải mã sẽ quá lớn nên xem như không thể thực hiện được Tính chấtnày dựa trên 2 vấn đề của toán học: bài toán phân tích ra thừa số nguyên tốcác số nguyên lớn và bài toán RSA Nếu 2 bài toán trên là khó (không tìmđược thuật toán hiệu quả để giải chúng) thì không thể thực hiện được việcphá mã toàn bộ đối với RSA
Bài toán RSA là bài toán tính căn bậc e môđun n (với n là hợp số): tìm
Trang 13số m sao cho me=c mod n, trong đó (e, n) chính là khóa công khai và c làbản mã Hiện nay phương pháp triển vọng nhất giải bài toán này là phân tích
n ra thừa số nguyên tố Vì khóa là công khai nên việc tấn công bẻ khóaphương pháp RSA thường dựa vào khóa công khai để xác định được khóa
riêng tương ứng Điều quan trọng là dựa vào n để tính p, q của n, từ đó tính được d Khi thực hiện được điều này, kẻ tấn công sẽ tìm ra số mũ bí mật d từ
khóa công khai và có thể giải mã theo đúng quy trình của thuật toán Nếu kẻtấn công tìm được 2 số nguyên tố p và q sao cho: n = pq thì có thể dễ dàngtìm được giá trị (n) =(p-1)(q-1) và qua đó xác định d từ e Tuy nhiên nếukhông biết trước p,q thì như đã biết không có một thuật toán hiệu quả nào
để phân tích thừa số nguyên tố từ n, tức là tìm được p, q, khi n lớn Nghĩa làkhông thể tìm được (n) và do đó không tính được d (d=e-1(mod m) theothuật toán gcd mở rộng)
Tại thời điểm năm 2005, số lớn nhất có thể được phân tích ra thừa sốnguyên tố có độ dài 663 bít với phương pháp phân tán trong khi khóa củaRSA có độ dài từ 1024 tới 2048 bít Một số chuyên gia cho rằng khóa 1024bít có thể sớm bị phá vỡ (cũng có nhiều người phản đối việc này) Với khóa
4096 bít thì hầu như không có khả năng bị phá vỡ trong tương lai gần Do
đó, người ta thường cho rằng RSA đảm bảo an toàn với điều kiện n đượcchọn đủ lớn Nếu n có độ dài 256 bít hoặc ngắn hơn, nó có thể bị phân tíchtrong vài giờ với máy tính cá nhân dùng các phần mềm có sẵn Nếu n có độdài 512 bít, nó có thể bị phân tích bởi vài trăm máy tính tại thời điểm năm
1999 Một thiết bị lý thuyết có tên là TWIRL do Shamir và Tromer mô tảnăm 2003 đã đặt ra câu hỏi về độ an toàn của khóa 1024 bít Vì vậy hiện nayngười ta khuyến cáo sử dụng khóa có độ dài tối thiểu 2048 bít
Năm 1993, PETER Shor công bố thuật toán Shor chỉ ra rằng: máy tính