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

Atbmtt đề cương bài tập lớn an toàn và bảo mật thông tin

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.48 MB, 43 trang )

-------------

BÁO CÁO THỰC NGHIỆM
Học phần: An toàn & Bảo mật thơng tin
Chủ đề: Xây dựng chương trình mã hóa và giải mã RSA
Giáo viên hướng dẫn :
Nhóm sinh viên thực hiện :
Mã Lớp:
Nhóm: 2

Hà Nội, năm 2023


Lời mở đầu
Trước đây khi cơng nghệ máy tính chưa phát triển, khi nói đến vấn đề an
tồn bảo mật thông tin, chúng ta thường hay nghĩ đến các biện pháp nhằm đảm
bảo cho thông tin được trao đổi hay cất giữ một cách an tồn và bí mật, chẳng hạn
là các biện pháp như: Đóng dấu và ký niêm phong một bức thư để biết rằng lá thư
có được chuyển nguyên vẹn đến người nhận hay không, dùng mật mã mã hóa
thơng điệp để chỉ có người gửi và người nhận hiểu được thông điệp, lưu giữ tài
liệu trong các két sắt có khóa tại nơi được bảo vệ nghiêm ngặt.
Ngày nay với sự phát triển của khoa học công nghệ, đặc biệt là sự phát triển
của Internet, việc sử dụng máy tính và điện thoại cá nhân càng trở lên rộng rãi,
dẫn đến càng nhiều thông tin được lưu trữ trên máy tính và gửi đi trên mạng
Internet. Do đó nhu cầu về an tồn và bảo mật thơng tin trên máy tính càng nhiều
và việc sử dụng mật mã mã hóa càng được phổ biến. Trong đồ án này, nhóm em
thực hiện xây dựng chương trình mã hóa và giải mã mật mã hóa cơng khai RSA
(sử dụng ngôn ngữ Java, C#). Báo cáo này gồm 3 chương:
• Chương 1: Tổng quan.
• Chương 2: Kết quả nghiên cứu.
• Chương 3: Kết luận, bài học rút ra.


Trong quá trình thực hiện đề tài nhóm chúng em xin gửi lời cám ơn tới thầy
giảng viên hướng dẫn nhóm chúng em thực hiện đề tài này. Trong quá trình nghiên
cứu và thực hiện đề tài được sự chỉ bảo tận tình của thầy, nhóm chúng em đã cố
gắng để hồn thiện đề tài. Tuy nhiên sẽ vẫn không tránh được thiếu xót và chưa
được hồn thiện về mặt nội dung.
Vì vây, chúng em mong thầy và các bạn có thể xem qua và đánh giá nhận xét
để bài báo cáo hồn thiện và chính xác nhất ạ.
Chúng em xin chân thành cảm ơn!


Mục lục
Chương 1: Tổng quan ......................................................................................... 1
Tổng quan về An tồn bảo mật thơng tin ....................................................... 1
An tồn bảo mật thông tin .......................................................................... 1
Khái niệm hệ thống và tài sản của hệ thống .............................................. 1
Các mối đe dọa đối với 1 hệ thống và biện pháp ngăn chặn ..................... 1
Mục tiêu của an tồn bảo mật thơng tin ..................................................... 2
Lý do chọn đề tài ............................................................................................ 3
Nội dung nghiên cứu ...................................................................................... 3
Các kiến thức cơ sở ........................................................................................ 4
Chương 2: Kết quả nghiên cứu .......................................................................... 5
Nghiên cứu, tìm hiểu hệ mã hóa khóa cơng khai........................................... 5
Giới thiệu chung về mã hóa ....................................................................... 5
Đặc trưng và nhược điểm của khóa bí mật ................................................ 6
Khái niệm mã hóa cơng khai ..................................................................... 6
Mã hóa và giải mã thơng điệp bằng phương pháp mã hóa khóa cơng khai
7
Độ an tồn .................................................................................................. 8
Ưu, nhược điểm của hệ mật khóa cơng khai ............................................. 8
Nghiên cứu, tìm hiểu về chương trình mã hóa và giải mã RSA .................... 9

Hệ mật mã RSA ......................................................................................... 9
Độ an toàn của RSA ................................................................................... 9
Bài tốn phân tích ra thừa số ngun tố ................................................... 12
Nội dung thuật toán ...................................................................................... 12
Thuật toán Euclid ..................................................................................... 12
Thuật tốn bình phương và nhân ............................................................. 13
Định lý Fermat ......................................................................................... 14
Hàm số Euler............................................................................................ 14
Định lý phần dư Trung Hoa ..................................................................... 15
Thuật tốn mã hóa, giải mã RSA ............................................................. 15


Thiết kế chương trình, cài đặt thuật tốn ..................................................... 16
Giới thiệu ngơn ngữ lập trình sử dụng để cài đặt thuật tốn ................... 16
Thiết kế kịch bản chương trình ................................................................ 17
Cài đặt thuật tốn, hình ảnh minh họa ..................................................... 18
Chương 3: Kết luận và bài học kinh nghiệm .................................................. 38
Kiến thức kỹ năng đã học được trong quá trình thực hiện đề tài. ................ 38
Bài học kinh nghiệm .................................................................................... 38
Đề xuất về tính khả thi của chủ đề nghiên cứu, những thuận lợi, khó khăn 38
Tài liệu tham khảo
[1]. Trần Đức Sự (Chủ biên), Nguyễn Văn Tảo, Trần Thị Lượng, Giáo trình An
tồn bảo mật dữ liệu, NXB Đại học Thái Ngun, 2015.
[2]. Giáo trình An tồn và bảo mật thơng tin, Hải Phịng, 2008.


1

Chương 1: Tổng quan
Tổng quan về An toàn bảo mật thơng tin

An tồn bảo mật thơng tin
Thơng tin là một bộ phận quan trọng và là tài sản thuộc quyền sở hữu của các
tổ chức.
Sự thiệt hại và lạm dụng thông tin không chỉ ảnh hưởng đến người sử dụng
hoặc các ứng dụng mà nó cịn gây ra các hậu quả tai hại cho tồn bộ tổ chức đó.
Thêm vào đó sự ra đời của Internet đã giúp cho việc truy cập thông tin ngày càng
trở nên dễ dàng hơn.
Khái niệm hệ thống và tài sản của hệ thống
Khái niệm hệ thống: Hệ thống là môt tâp hợp các máy tính gồm các thành phần
phần cứng, phần mềm và dữ liệu làm viêc ̣ được tích lũy qua thời gian.
Tài sản của hệ thống bao gồm:
• Phần cứng
• Phần mềm
• Dữ liệu
• Các truyền thơng giữa các máy tính của hệ thống
• Mơi trường làm việc
• Con người
Các mới đe dọa đối với 1 hệ thống và biện pháp ngăn chặn
• Có 3 hình thức chủ yếu:
o Phá hoại: kẻ thù phá hỏng thiết bị phần cứng hoặc phần mềm hoạt
động trên hệ thống.
o Sửa đổi: Tài sản hệ thống bị sửa đổi trái phép. Điều này thường làm
cho hệ thống khơng làm đúng chức năng của nó. Chẳng hạn như thay
đổi mật khẩu, quyền người dùng trong hệ thống làm họ không thể
truy cập làm việc.


2

o Can thiệp: Tài sản bị truy cập bởi người khơng có thẩm quyền. Các

truyền thơng thực hiện trên hệ thống bị ngăn chặn, sửa đổi.
Các đe dọa đối với một hệ thống thơng tin có thể đến từ nhiều nguồn và
được thực hiện bởi các đối tượng khác nhau. Chúng ta có thể chia thành 3
loại đối tượng như sau :
o Các đối tượng từ ngay bên trong hệ thống (insider), đây là những
người có quyền truy câp ̣ hợp pháp đối với hệ thống.
o Những đối tượng bên ngoài hệ thống (hacker, cracker), thường các
đối tượng này tấn công qua những đường kết nối với hệ thống như
Internet chẳng hạn.
o Và thứ ba là các phần mềm (chẳng hạn như spyware, adware …) chạy
trên hệ thống.
• Các đối tượng đe dọa:
o Các đối tượng từ bên trong hệ thống, là nhưỡng người có quyền truy
cập hợp pháp vào hệ thống.
o Những đối tượng bên ngoài hệ thống, tấn công qua những đường kết
nối với hệ thống.
o Các phần mềm chạy trên hệ thống.
• Biện pháp ngăn chặn:
o Điều khiển qua phần mềm: dựa vào cơ chế an toàn bảo mật của hệ
thống nền, các thuật toán mật mã học.
o Điều khiển qua phần cứng: các cơ chế bảo mật, các thuật tốn mã học
được cứng hóa để sử dụng.
o Điều khiển qua các chính sách tổ chức: ban hành các quy định của tổ
chức nhằm đảm bảo tính an toàn của hệ thống.
Mục tiêu của an toàn bảo mật thơng tin
Ba mục tiêu của an tồn bảo mật thơng tin:
• Tính bí mật: Tài sản của hệ thống chỉ được truy cập bởi những người có
thẩm quyền. Các loại truy cập gồm có: đọc (reading), xem (viewing), in ấn
(printing), sử dụng chương trình, hoăc ̣ hiểu biết về sự tồn tại của một đối
tượng trong tổ chức. Tính bí mật có thể được bảo vệ nhờ việc kiểm soát truy



3

câp ̣ (theo nhiều kiểu khác nhau ) hoặc nhờ các thuật tốn mã hóa dữ liệu.
Kiểm sốt truy cập chỉ có thể được thực hiêṇ với các hệ thống phần cứng
vật lý. Cịn đối với các dữ liệu cơng cộng thì thường phương pháp hiệu quả
là các phương pháp của mật mã học.
• Tính tồn vẹn dữ liệu: Tài sản của hệ thống chỉ được thay đổi bởi những
người có thẩm quyền.
• Tính sẵn dùng: Tài sản ln sẵn sàng được sử dụng bởi những người có
thẩm quyền.
Lý do chọn đề tài
Chương trình Mã hố và Giải mã RSA là một thuật toán mã hoá đối xứng
(symmetric cryptography) được sử dụng phổ biến để bảo mật thông tin trên
Internet. Thuật tốn này sử dụng hai khóa, một khóa dùng để mã hố (public key)
và một khóa dùng để giải mã (private key). Điều này giúp cho việc truyền tải thơng
tin được bảo mật hơn và đảm bảo tính riêng tư của dữ liệu.
Việc chọn đề tài chương trình Mã hố và Giải mã RSA cho bài tập lớn được
nhóm em lựa chọn là nhằm phục vụ cho mục đích:
• Tìm hiểu về cách hoạt động của thuật tốn RSA và lý do tại sao nó được sử
dụng phổ biến trong bảo mật thơng tin.
• Thực hành làm quen với cách thực hiện mã hóa và giải mã thơng tin bằng
thuật tốn RSA.
• Khám phá và đánh giá các ứng dụng thực tiễn của thuật toán RSA trong các
lĩnh vực khác nhau, như trong bảo mật thông tin, kinh doanh, tài chính, ngân
hàng, v.v.
Cuối cùng, việc nghiên cứu và hiểu rõ về chương trình Mã hố và Giải mã RSA
giúp bạn có thể nắm bắt được những kiến thức quan trọng về bảo mật thông tin,
cũng như tạo ra các giải pháp bảo mật thông tin tốt hơn cho các dự án và ứng dụng

của mình.
Nội dung nghiên cứu
• Nghiên cứu tìm hiểu mã hóa cơng khai:
Ý tưởng về một hệ mật khố cơng khai được Diffie và Hellman đưa ra vào
năm 1976. Cịn việc hiện thực hố nó thì do Rivesrt, Shamir và Adleman


4

đưa ra lần đẩu tiên vào năm 1977, họ đã tạo nên hệ mật nổi tiếng RSA (sẽ
được nghiên cứu trong chương này). Kể từ đó đã cơng bố một số hệ, độ mật
của chúng dựa trên các bài tính tốn khác nhau.
• Nghiên cứu tìm hiểu hệ mật RSA:
Hệ mã RSA được đặt tên dựa theo các chữ cái đầu của 3 tác giả của hệ mã
là Rivest, Shamir và Adleman. Đây là thuật tốn mã hóa nổi tiếng nhất và
cũng là thuật toán được ứng dụng thực tế nhất.
o Ý tưởng chính của thuật tốn RSA dựa trên việc phân tích một số
nguyên lớn thành tích của hai số ngun ngẫu nhiên, và sử dụng tính
tốn số học modulo để mã hóa và giải mã thơng điệp.
o Để mã hóa một thơng điệp M thành một số ngun C, người gửi sử
dụng khóa cơng khai của người nhận.
o Để giải mã một số nguyên C thành thông điệp ban đầu M, người nhận
sử dụng khóa bí mật của mình.
Các kiến thức cơ sở
• Các kiến thức về thuật toán, định lý:
o Nắm rõ các kiến thức cơ bản về hệ mật mã
o Kiến thức về hệ mật mã RSA
o Kiến thức về thuật toán: Thuật toán Euclid, định lí Fermat, bình
phương và nhân, hàm số Euler, định lý phần dư Trung Hoa, …
o Giải thuật RSA, tạo khóa, mã hóa, giải mã

• Các kiến thức về lập trình :
o Java : Hiểu và biết cách sử dụng công cụ lập trình Apache NetBeans
cũng như trang bị đủ kiến thức về ngôn ngữ này để code giao diện
minh họa.
o C# : Hiểu và biết cách sử dụng công cụ lập trình Visual Studio 2023
cũng như trang bị đủ kiến thức về ngôn ngữ này để code giao diện
minh họa.


5

Chương 2: Kết quả nghiên cứu
Nghiên cứu, tìm hiểu hệ mã hóa khóa cơng khai
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 ngồ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 tồ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ương pháp kiểm sốt lối vào ra nhằm ngăn cản sự xâm nhập trái phép vào
hệ thống nhờ xây dựng các kiểm số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.
• Phương pháp mã hóa dữ liệu: nghĩa là thơng tin được lưu trữ trong 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


6

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ử.
Đặc trưng và nhược điểm của khóa bí mật
Mã hóa khóa bí mật chỉ sử dụng MỘT khóa trong cả q trình mã hóa và giải
mã (đối xứng).
Nhược điểm:
• Cần có kênh an tồn để trao đổi khóa.
• Trên mơi trường mạng có N người dùng, thì cần N(N-1)/2 khóa để N(N1)/2 cặp người trao đổi thông tin (tổ hợp chập 2 của N phần tử) -> Cần quá
nhiều khóa cho nên việc quản lý khóa phức tạp.
• Khơng thể thiết lập được chữ ký điện tử.

→ Sử dụng mã cơng khai
Khóa cơng khai: Mọi người đều biết, dùng để mã hóa hoặc kiểm chứng chữ ký
điện tử.
Khóa bí mật: Chỉ người nhận biết, dùng để giải mã hoặc tạo chữ ký.
Đặc điểm:
• Khơng có khả năng tính tốn để tìm khóa giải mã nếu chỉ biết thuật tốn mã
và khố dùng để mã.
• Có thể dễ dàng mã hoá hoặc giải mã mẩu tin nếu biết khố tương ứng.
• Trong một số sơ đồ: Một khố bất kỳ trong hai khố có thể dùng để mã, cịn
khố kia dùng để giải mã. Chúng có vai trị đối ngược nhau.
Khái niệm mã hóa cơng khai
Vào năm 1975 Diffie và Hellman trong một cơng trình của mình (một bài báo)
đã đề xuất ra các ý tưởng cho phép xây dựng lên các hệ mã hoạt động theo các


7

nguyên tắc mới gắn liền với các bên truyền tin chứ không gắn với các cặp truyền
tin.
Nguyên tắc hoạt động của các hệ mã là mỗi bên tham gia truyền tin sẽ có 2
khóa, một khóa gọi là khóa bí mật và một khóa được gọi là khóa cơng khai. Khóa
bí mật là khóa dùng để giải mã và được giữ bí mật (KS), khóa cơng khai là khóa
dùng để sinh mã được cơng khai hóa để bất cứ ai cũng có thể sử dụng khóa này
gởi tin cho người chủ của hệ mã (KP). Ngày nay chúng ta có thể thấy rất rõ nguyên
tắc này trong việc gửi email , mọi người đều có thể gửi email tới một địa chỉ email
nào đó, nhưng chỉ có người chủ sở hữu của địa chỉ email đó mới có thể đọc được
nội dung của bức thư, cịn những người khác thì khơng. Với các hệ mã khóa cơng
khai viêc ̣phân phối khóa sẽ trở nên dễ dàng hơn qua các kênh cung cấp khóa cơng
cộng, số lượng khóa hệ thống quản lý cũng sẽ ít hơn (là n khóa cho n người dùng).
Các dịch vụ mới như chữ ký điện tử, thỏa thuận khóa cũng được xây dựng dựa

trên các hệ mã này.
Các yêu cầu của loại hệ mã này:
• Việc sinh KP, KS phải dễ dàng
• Việc tính E(KP, M) là dễ dàng
• Nếu có C = E(KP, M) và KS thì việc tìm bản rõ cũng là dễ
• Nếu biết KP thì việc dị tìm KS là khó
• Việc khơi phục bản rõ từ bản mã là rất khó
Mã hóa và giải mã thơng điệp bằng phương pháp mã hóa khóa
cơng khai
Bảo mật có vai trị quan trọng trong các giao dịch thơng qua mạng máy tính có
thể hiểu như việc ký kết vào một bức thư và đóng dấu lên phong bì. Nếu chữ kỹ
chứng minh sự tin cậy của bức thư, thì phong bì được đóng dấu chứng minh cho
sự bảo mật của bức thư.
Khi gửi văn bản điện tử, nếu người gửi muốn chỉ có người cần gửi đọc được
văn bản thì văn bản được mã hóa cơng khai của người nhận. Khi đó văn bản được
gửi đi là văn bản đã được mã hóa, người nhận muốn đọc được thì cần phải giải mã
văn bản bằng khóa bí mật của mình. Đó là mã hóa và giải mã có thể hiểu như gửi
thư và đọc thư.


8

Khóa cơng khai và khóa bí mật có liên hệ tốn học với nhau; về ngun tắc,
khóa này có thể được suy ra từ khóa kia và ngược lại; tuy nhiên việc tính tốn để
tìm ra khóa bí mật từ một khóa cơng khai đối với người bình thườn được xem như
khơng khả thi. Mỗi khóa sẽ đảm nhận những chức năng trái ngược nhau. Khóa bí
mật được sử dụng để ký và mã hóa thơng tin. Khác với kỹ thuật mã hóa này, việc
mã hóa sử dụng cặp khóa khơng đối xứng có ưu điểm hơn. Với kỹ thuật mã hóa
này, việc mã hóa và giải mã khơng dùng chung một khóa, nên khơng cần phải
chuyển khóa đi kèm theo văn bản; vì vậy khơng thể bị đánh cắp khóa trên đường

đi. Tuy vậy, nó có nhược điểm là việc giải mã sẽ mất nhiều thời gian hơn.
Độ an tồn
• Thám mã bằng phương pháp vét cạn khóa về mặt lý thuyết là ln ln có
thể thực hiện được.
• Nhưng trên thực tế các khóa sử dụng là quá lớn cho việc vét cạn (>512bit).
• Để chống lại một số phương pháp thám mã tiên tiến khác, cần phải sử dụng
các khóa rất lớn (>>512 bit).
• Do vậy việc cài đặt thuật tốn khóa cơng khai chậm hơn nhiều so với thuật
tốn khóa bí mật.
Ưu, nhược điểm của hệ mật khóa cơng khai
Vấn đề cịn tồn đọng của hệ mật mã khoá đối xứng được giải quyết nhờ hệ mật
mã khố cơng khai. Chính ưu điểm này đã thu hút nhiều trí tuệ vào việc đề xuất,
đánh giá các hệ mật mã công khai. Nhưng do bản thân các hệ mật mã khố cơng
khai đều dựa vào các giả thiết liên quan đến các bài tốn khó nên đa số các hệ mật
mã này đều có tốc độ mã dịch khơng nhanh lắm. Chính nhược điểm này làm cho
các hệ mật mã khố cơng khai khó được dùng một cách độc lập.
Một vấn đề nữa nảy sinh khi sử dụng các hệ mật mã khóa cơng khai là việc
xác thực mà trong mơ hình hệ mật mã đối xứng khơng đặt ra. Do các khố mã
cơng khai được cơng bố một cách công khai trên mạng cho nên việc đảm bảo rằng
“khố được cơng bố có đúng là của đối tượng cần liên lạc hay không?” là một kẽ
hở có thể bị lợi dụng, vấn đề xác thực này được giải quyết cũng chính bằng các hệ
mật mã khố công khai. Nhiều thủ tục xác thực đã được nghiên cứu và sử dụng


9

như Kerberos, X.509... Một ưu điểm nữa của các hệ mật mã khố cơng khai là các
ứng dụng của nó trong lĩnh vực chữ ký số. cùng với các kết quả về hàm băm, thủ
tục ký để bảo đảm tính toàn vẹn cùa một văn bản được giải quyết.
Nghiên cứu, tìm hiểu về chương trình mã hóa và giải mã RSA

Hệ mã RSA được đặt tên dựa theo các chữ cái đầu của 3 tác giả của hệ mã là
Rivest, Shamir và Adleman.
Đây là thuật tốn mã hóa nổi tiếng nhất và cũng là thuật toán được ứng dụng thực
tế nhất.
Hệ mật mã RSA
• Để mã hóa một thơng điệp M: C = Me (mod N) (0 <= M < N)
• Giải mã: M = Cd (mod N)
Thuật tốn mã hóa RSA làm việc đƣợc bởi vì nó dựa trên cơ sở toán học là sự
tổng quát định lý Ferma nhỏ của Euclid: X(N) = 1 (mod N).
Trong thuật toán RSA chúng ta chọn e và d là nghịch đảo của nhau trên vành
Z(N) với e được chọn trước. Do đó chúng ta sẽ có e.d  1 mod (N),
suy ra: M = Cd = M e.d = M1+q.(N) = M . (M(N)) q = M mod N
Công thức này đảm bảo việc giải mã sẽ cho kết quả đúng là bản rõ ban đầu
(chú ý là điều này chỉ đúng khi p khác q).
Thuật tốn mã hóa RSA thỏa mãn 5 yêu cầu của một hệ mã hiện đại:
o Hệ bảo mật cao
o Thao tác nhanh
o Dùng chung được
o Có ứng dụng rộng rãi
o Có thể dùng xác định chủ nhân (dùng làm chữ ký điện tử)
Vì vậy, RSA được sử dụng rộng rãi trong cơng tác mã hóa và công nghệ chữ
ký điện tử: truyền dẫn quỹ điện tử chuyển đổi thư điện tử, giao dịch tiền điện tử,
thương mại điện tử tài chính- ngân hàng...
Độ an tồn của RSA
Độ an toàn của RSA phụ thuộc vào độ khó của việc tính (N) và điều này địi
hỏi chúng ta cần phân tích N ra thừa số nguyên tố.


10


Thuật tốn phân tích số ngun tố hiệu quả nhất hiện nay là Brent-Pollard,
chúng ta hãy xem xét bảng thống kê sau để thấy được tốc độ hoạt động của nó:

Bảng 2. 1: Tốc độ của thuật tốn Brent-Pollard
Các nghiên cứu về vấn đề phân tích các số nguyên lớn hiện nay tiến triển rất
chậm, các tiến bộ lớn nhất cũng chỉ là các cải tiến về thuật toán và có thể nói rằng
trừ khi có các đột phá trong việc phân tích các số 1024 bit, RSA là an toàn trong
thời điểm hiện nay.
Trên thực tế để cài đặt RSA cần phải thực hiện các thao tác modulo với các số
300 chữ số (hay 1024 bit) mà hiện nay các máy tính mới chỉ thao tác với các số
nguyên 64 bit, điều này dẫn đến nhu cầu cần các thƣ viện số học nhân chính xác
để làm việc với các số nguyên lớn này. Ngoài ra việc sử dụng RSA cần tới các số
nguyên tố lớn nên chúng ta cũng phải có một cơ sở dữ liệu các số nguyên tố.
Để tăng tốc cho RSA chúng ta có thể sử dụng một số phương pháp khác chẳng
hạn như cải tiến các phép tính tốn nhân hai số lớn hoặc tăng tốc việc tìm bản mã,
bản rõ.


11

Đối với phép nhân 2 số n bit thông thƣờng chúng ta cần thực hiện O(n2) phép
tính bit. Thuật tốn nhân các số nguyên Schonhage – Strassen cho phép chúng ta
thực hiện phép nhân 2 số với độ phức tạp là O(n log n) với các bước như sau:
• Chia mỗi số nguyên thành các khối, sử dụng các khối này như các hệ số của
một đa thức.
• Tính các đa thức này tại một số các điểm thích hợp, và nhân các kết quả thu
được.
• Nội suy các kết quả này hình thành các hệ số của đa thức tích
• Kết hợp các hệ số để hình thành nên tích của hai số ban đầu
• Biến đổi Fourier rời rạc, và lý thuyết chặp có thể được sử dụng để tăng tốc

độ của quá trình nội suy.
Một cách khác nữa để tăng tốc việc nhân các số lớn trong hệ mã RSA là sử
dụng các phần cứng chuyên dụng với các thuật tốn song song.
Như đã trình bày ở phần trước khi mã hóa chúng ta thường chọn e nhỏ để đẩy
nhanh q trình mã hóa nhưng điều này cũng đồng nghĩa là việc giải mã sẽ chậm
do số mũ lớn. Một cải tiến đáng kể trong tốc độ giải mã RSA có thể nhận được
bằng cách sử dụng định lý phần dư Trung Hoa làm việc với modulo p và q tương
ứng thay vì N. Vì p và q chỉ bằng một nửa của N nên tính tốn sẽ nhanh hơn nhiều.
Định lý phần dư Trung Hoa đƣợc sử dụng trong RSA bằng cách tạo ra hai
phương trình từ việc giải mã M = Cd (mod N) như sau:
M1 = M mod p = (C mod p)d mod (p-1)
M2 = M mod q = (C mod q)d mod (q-1)
Sau đó ta giải hệ:
M = M1 mod p
M = M2 mod q
Hệ này có nghiệm duy nhất theo định lý phần dư Trung Hoa
M = [(M2 + q – M1)u mod q] p + M1
Trong đó p.u mod q = 1
Việc sử dụng định lý phần dư Trung Hoa là một phương pháp được sử dụng
rộng rãi và phổ biến để tăng tốc độ giải mã của RSA.


12

Bài tốn phân tích ra thừa sớ ngun tớ
Bài tốn phân tích một số nguyên n >1 thành thừa số ngun tố cũng được
xem là một bài tốn khó thường được sử dụng trong lý thuyết mật mã. Biết một số
n là hợp số thì việc phân tích n thành thừa số mới là có nghĩa, do đó thường khi để
giải bài tốn phân tích n thành thừa số, ta thử trước n có là hợp số hay khơng; và
bài tốn phân tích n thành thừa số có thể dẫn về bài tốn tìm một ước so của n, vì

khi biết một ước số d cùa n thì tiến trình phân tích n được tiếp tục thực hiện bằng
cách phân tích d và n|d.
Độ bảo mật của hệ RSA dựa trên độ khó của việc phân tích ra thừa số nguyên
tố lớn.
Nội dung thuật toán
Thuật toán Euclid
Thuật toán Euclid là một thuật toán để xác định ước chung lớn nhất (GCD Greatest Common Divisor) của 2 phần tử thuộc vùng Euclid (ví dụ: các số
ngun). Thuật tốn Euclid là một trong những thuật toán cổ nhất được biết đến,
từ khi xuất hiện trong cuốn Euclid’s Elements khoảng năm 300 trước cơng ngun.
Thuật tốn Euclid sử dụng để giải một phương trình vơ định ngun (cịn được
gọi là phương trình Đi-ơ-phăng ) có dạng: a * x + b * y = c, trong đó a, b, c là các
hệ số nguyên, x, y là các ẩn nhận giá trị nguyên. Điều kiện cần và đủ để phương
trình này có nghiệm (nguyên) là GCD(a,b) là ước của c. Khẳng định này dựa trên
một mệnh đề sau:
Nếu d = UCLN(a,b) thì tồn tại các số nguyên x,y sao cho ax + by = d
Thuật tốn Euclid tìm ước số chung lớn nhất:


13

Thuật tốn Euclid mở rộng: Tìm ước số chung lớn nhất của 2 số nguyên không âm
a, b là d và 2 số x, y thỏa mãn điều kiện ax+by = d

Thuật tốn bình phương và nhân
Dùng để tính ak mod n
Biểu diễn k dưới dạng nhị phân blbl-1bl-2 …b0 bi{0, 1}, 0 i l


14


Định lý Fermat
ap-1 mod p = 1
Với p là số nguyên tố, a là số nguyên dương và không chia hết cho p.
ap = a mod p với a < p
Một dạng tổng quát của định lý Fermat: Nếu p là số nguyên tố và m, n là các số
nguyên dương thỏa mãn m ≡ n (mod p – 1), thì với mọi a thuộc tập hợp các số
nguyên thì: am ≡ an (mod p)
Hàm số Euler
Cho số nguyên dương n, số lượng các số nguyên dương bé hơn n và nguyên tố
cùng nhau với n được ký hiệu Ф(n) và gọi là hàm Euler.
Nhận xét: Nếu p là số ngun tố, thì Ф (n) = n -1
Một số tính chất của hàm Euler:
• p là số nguyên tố Ф(p) = p-1
• Nếu p và q là 2 số nguyên tố khác nhau thì: Ф(p.q) = Ф(p). Ф(q)= (p-1).(q1).
• Nếu p là số ngun tố thì Ф(pn)= pn - pn-1
• Nếu s và t là số nguyên tố cùng nhau thì: Ф(s.t) = Ф(s). Ф(t)
Định lý Euler: Với mỗi số a và n tương đối nguyên tố với nhau thì:
aФ(n) mod n = 1


15

Định lý phần dư Trung Hoa
Trong nhiều trường hợp ta muốn tìm cách để tăng tốc độ tính tốn Modulo. Các
phép tốn trên modulo các số nhỏ tính nhanh nhiều so với các số lớn. Chính vì vậy
nếu số lớn phân tích được thành tích của các số nhỏ, từng cặp ngun tố cùng
nhau, thì ta sẽ có cách tính hiệu quả nhờ vào định lý Phần dư Trung hoa.
Tính tốn module số lớn: Để tính A mod M, với M khá lớn và A là biểu thức số
học nào đó. Có thể tính theo các bước sau:
• Phân tích M thành tích: M = m1 × m2 × … × mk, GCD(mi, mj) = 1 với mọi i

khác j
• Tính Mi = M/mi i =1,2,3,…,k
• Tính ai = A mod mi, với i = 1,2,3,…,k
• Tính ci = Mj × (Mi-1 mod mi)
• Cuối cùng tính:
Giải hệ phương trình modulo: ai = x mod mi, với GCD(mi, mj) = 1, với mọi i
khác j. Khi đó ta cũng áp dụng Định lý phần dư Trung Hoa để tìm x.
Thuật tốn mã hóa, giải mã RSA
• Tạo khóa:
1. Chọn 2 số nguyên tố lớn: p và q, với p # q và p, q >120 chữ số. Lựa chọn
ngẫu nhiên và độc lập.
2. Tính số n = p.q
3. Tính số φ(n) = (p-1).(q-1) (hàm phi Euler)
4. Chọn số e sao cho 1 < e < φ(n) và là số nguyên tố cùng nhau với φ(n)
(tức là: gcd(e, φ(n)) = 1, để đảm bảo e-1 mod φ(n) tồn tại duy nhất)
5. Tính số d = e-1 mod φ(n)
Khi đó, ta có khóa là các bộ số:
Khóa cơng khai: Ku = {e,n}
Khóa bí mật: Kr = {d,p,q}
• Mã hóa:
o Thơng điệp ban đầu: m (0 < m < n)


16

o Sử dụng khóa cơng khai Ku = {e, n} để tính thơng điệp mã hóa
(ciphertext):
c = me mod n
• Giải mã:
Người nhận dùng khóa bí mật Kr = {d,p,q} để tính lại thơng điệp gốc m từ

thơng điệp đã mã hóa c:
m = cd mod n
n = p *q
Thiết kế chương trình, cài đặt thuật tốn
Giới thiệu ngơn ngữ lập trình sử dụng để cài đặt thuật tốn
2.4.1.1. Java
• Java là gì ?
Java là một trong những ngơn ngữ lập trình hướng đối tượng. Nó được sử
dụng trong phát triển phần mềm, trang web, game hay ứng dụng trên các
thiết bị di động.
Java được khởi đầu bởi James Gosling và bạn đồng nghiệp ở Sun
MicroSystem năm 1991. Ban đầu Java được tạo ra nhằm mục đích viết phần
mềm cho các sản phẩm gia dụng, và có tên là Oak.
Java được phát hành năm 1994, đến năm 2010 được Oracle mua lại từ Sun
MicroSystem.
Java được tạo ra với tiêu chí “Viết (code) một lần, thực thi khắp nơi” (Write
Once, Run Anywhere – WORA). Chương trình phần mềm viết bằng Java
có thể chạy trên mọi nền tảng (platform) khác nhau thông qua một mơi
trường thực thi với điều kiện có mơi trường thực thi thích hợp hỗ trợ nền
tảng đó.
• Đặc điểm của ngơn ngữ lập trình Java
o Tương tự C++, hướng đối tượng hoàn toàn
o Độc lập phần cứng và hệ điều hành
o Ngôn ngữ thông dịch
o Cơ chế thu gom rác tự động


17

o Đa luồng

o Tính an tồn và bảo mật
2.4.1.2. C#
• C# là gì?
C# (hay C sharp) là một ngơn ngữ lập trình đơn giản, được phát triển bởi
đội ngũ kỹ sư của Microsoft vào năm 2000. C# là ngôn ngữ lập trình hiện
đại, hướng đối tượng và được xây dựng trên nền tảng của hai ngôn ngữ
mạnh nhất là C++ và Java.
Trong các ứng dụng Windows truyền thống, mã nguồn chương trình được
biên dịch trực tiếp thành mã thực thi của hệ điều hành. Trong các ứng dụng
sử dụng .NET Framework, mã nguồn chương trình (C#, VB.NET) được
biên dịch thành mã ngơn ngữ trung gian MSIL (Microsoft intermediate
language).
Sau đó mã này được biên dịch bởi Common Language Runtime (CLR) để
trở thành mã thực thi của hệ điều hành. Hình bên dưới thể hiện quá trình
chuyển đổi MSIL code thành native code.
C# với sự hỗ trợ mạnh mẽ của .NET Framework giúp cho việc tạo một ứng
dụng Windows Forms hay WPF (Windows Presentation Foundation), phát
triển game, ứng dụng Web, ứng dụng Mobile trở nên rất dễ dàng.
• Đặc trưng của ngơn ngữ lập trình C# là gì?
o C# là ngơn ngữ hiện đại
o C# là một ngơn ngữ lập trình thuần hướng đối tượng
o C# là một ngơn ngữ ít từ khóa
Thiết kế kịch bản chương trình
• Chọn hai số ngun tố lớn p và q.
• Tính n = p * q và φ(n) = (p-1) * (q-1).
• Chọn một số e sao cho 1 < e < φ(n) và e là số ngun tố cùng nhau với φ(n).
• Tìm một số d sao cho (d * e) % φ(n) = 1.
• Khóa cơng khai của bạn sẽ là (e, n), và khóa bí mật của bạn sẽ là (d, n).
• Để mã hóa một số m, tính c = m^e mod n.



18

• Để giải mã số c, tính m = c^d mod n.
Bằng cách thực hiện các bước trên sẽ giúp tạo ra một chương trình mã hóa và
giải mã RSA. Tuy nhiên, việc cài đặt chương trình này có thể phức tạp hơn nhiều
so với kịch bản này, đặc biệt là khi muốn mã hóa và giải mã nhiều số hoặc văn
bản dài hơn.
Cài đặt thuật tốn, hình ảnh minh họa
2.4.3.1. Giải mã và mã hóa RSA bằng ngơn ngữ C#
2.4.3.1.1. Giao diện chương trình

2.4.3.1.2.

Cài đặt và triển khai:

• Bước 1: Giải nén File Nhom2_RSA_CSharp.rar, sau đó chọn WF_RSA và
chọn WF_RSA.sln, chọn cơng cụ Visual studio để mở chương trình.


19

• Bước 2: Sau khi Visual studio mở lên bấm F5 hoặc nhấn Start để chạy
chương trình.

• Bước 3: Thực hiện bài toán và kết quả thu được:


20


Code chương trình:

2.4.3.1.3.
• Thư viện sử dụng:
using
using
using
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.IO;
System.Linq;
System.Numerics;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;

• Khai báo các biến:
private

private
private
private
private
private

int
int
int
int
int
int

rsa_SoP;
rsa_SoQ;
rsa_SoN;
rsa_PhiN;
rsa_SoE;
rsa_SoD;

• Tạo khóa:
private void createKey_Btn_Click(object sender, EventArgs e)
{
// radioButton tạo khóa ngẫu nhiên được chọn
if (rd_createRandomKey.Checked == true &&
rd_createManualKey.Checked == false)
{
// Tạo 2 số nguyên tố p, q ngẫu nhiên
do
{

rsa_Key.Rsa_SoP = rsa_Algothrim.SoNgauNhien();
rsa_Key.Rsa_SoQ = rsa_Algothrim.SoNgauNhien();
} while (rsa_Key.Rsa_SoP == rsa_Key.Rsa_SoQ ||
!rsa_Algothrim.KiemTraSNT(rsa_Key.Rsa_SoP) ||
!rsa_Algothrim.KiemTraSNT(rsa_Key.Rsa_SoQ));
rsa_Key.Rsa_SoN = (rsa_Key.Rsa_SoP * rsa_Key.Rsa_SoQ);
rsa_Key.Rsa_PhiN = (rsa_Key.Rsa_SoP - 1) * (rsa_Key.Rsa_SoQ 1);
do
{
Random random = new Random();
rsa_Key.Rsa_SoE = random.Next(1, rsa_Key.Rsa_PhiN);


21
} while (!rsa_Algothrim.KiemTraSNTCungNhau(rsa_Key.Rsa_SoE,
rsa_Key.Rsa_PhiN));
rsa_Key.Rsa_SoD =
rsa_Algothrim.TimSoNghichDao(rsa_Key.Rsa_SoE, rsa_Key.Rsa_PhiN);
if (rsa_Key.Rsa_SoD == -1)
{
txt_RSA_SoD.Text = "Không tồn tại d";
txt_PrimaryKey_KrSoD.Text = "Không tồn tại d";
return;
}
else
{
txt_RSA_SoD.Text = rsa_Key.Rsa_SoD.ToString();
txt_PrimaryKey_KrSoD.Text = rsa_Key.Rsa_SoD.ToString();
}
}

// radioButton nhập thủ công được chọn
if (rd_createManualKey.Checked == true &&
rd_createRandomKey.Checked == false)
{
if (txt_RSA_SoP.Text != "" || txt_RSA_SoQ.Text != "")
{
rsa_Key.Rsa_SoP = int.Parse(txt_RSA_SoP.Text);
rsa_Key.Rsa_SoQ = int.Parse(txt_RSA_SoQ.Text);
// Tính n
rsa_Key.Rsa_SoN = (rsa_Key.Rsa_SoP * rsa_Key.Rsa_SoQ);
// Tính phiN
rsa_Key.Rsa_PhiN = (rsa_Key.Rsa_SoP - 1) *
(rsa_Key.Rsa_SoQ - 1);
rsa_Key.Rsa_SoE = int.Parse(txt_RSA_SoE.Text);
rsa_Key.Rsa_SoD =
rsa_Algothrim.TimSoNghichDao(rsa_Key.Rsa_SoE, rsa_Key.Rsa_PhiN);
if (rsa_Key.Rsa_SoD == -1)
{
txt_RSA_SoD.Text = "Không tồn tại d";
txt_PrimaryKey_KrSoD.Text = "Không tồn tại d";
}
else
{
txt_RSA_SoD.Text = rsa_Key.Rsa_SoD.ToString();
txt_PrimaryKey_KrSoD.Text =
rsa_Key.Rsa_SoD.ToString();
}
}
else
{

MessageBox.Show("Cần điền đầy đủ thông tin.", "Lỗi",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}


×