PHỤ LỤC
LỜI MỞ ĐẦU
Ngà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ừ xa vớ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 tin bình
thường thì không có ai chú ý đến, nhưng đối với những thông tin mang tí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ật thật sự rất quan trọng. Nhiều
tổ chức, cá nhân đã tìm kiếm và đưa ra nhiều giải pháp bảo mật. Khi một người muốn
trao đổi thông tin với một người hay một tổ chức nào đó thông qua mạng máy tính thì
yêu cầu quan trọng là làm sao để đảm bảo thông tin không bị sai lệch hoặc bị lộ do sự
xâm nhập của kẻ thứ ba. Trước các yêu cầu cần thiết đó, một số giải thuật mã hóa đã
dược xây dựng nhằm đảm bảo tính an toàn dữ liệu tại nơi lưu trữ cũng như khi dữ liệu
được truyền trên mạng, như các giải thuật mã hóa đối xứng (DES), giải thuật mã hóa
công khai, Việc tìm hiểu cơ chế và thuật toán của các giải thuật này cũng không nằm
ngoài mục đích của đề tài này.
Vì kiến thức còn hạn chế nên còn nhiều thiếu sót trong đề tài về mã hóa, kính mong các
thầy cô giáo góp ý để đề tài được hoàn thiện hơn.
Em xin chân thành cảm ơn thầy PGS.TS. Đỗ Văn Nhơn đã truyền đạt cho em nhưng kiến
thức nền thất quý giá để em có thể hoàn thành đề tài này.
NỘI DUNG:
CHƯƠNG 1:TỔNG QUAN MÃ HÓA THÔNG TIN
I. Khái niệm:
Như chúng ta đã biết, Internet hình thành và phát triển từ yêu cầu của chính phủ Mỹ
nhằm phục vụ cho mục đích quân sự. Khi chúng ta tham gia trao đổi thông tin, thì
Internet là môi trường không an toàn, đầy rủi ro và nguy hiểm, không có gì đảm bảo rằng
thông tin mà chúng ta truyền đi không bị đọc trộm trên đường truyền. Do đó, mã hoá
được áp dụng như một biện pháp nhằm giúp chúng ta tự bảo vệ chính mình cũng như
những thông tin mà chúng ta gửi đi. Bên cạnh đó, mã hoá còn có những ứng dụng khác
như là bảo đảm tính toàn vẹn của dữ liệu.
mục tiêu sau:
Chương 2: Confidentiality (Tính bí mật):
Đảm bảo dữ liệu được truyền đi một cách an toàn và không thể bị lộ thông tin nếu như có
ai đó cố tình muốn có được nội dung của dữ liệu gốc ban đầu. Chỉ những người được
phép mới có khả năng đọc được nội dung thông tin ban đầu.
Chương 3: Authentication (Tính xác thực):
Giúp cho người nhận dữ liệu xác định được chắc chắn dữ liệu mà họ nhận là dữ liệu gốc
ban đầu. Kẻ giả mạo không thể có khả năng để giả dạng một người khác hay nói cách
khác không thể mạo danh để gửi dữ liệu. Người nhận có khả năng kiểm tra nguồn gốc
thông tin mà họ nhận được.
Chương 4: Integrity (Tính toàn vẹn):
Giúp cho người nhận dữ liệu kiểm tra được rằng dữ liệu không bị thay đổi trong quá trình
truyền đi. Kẻ giả mạo không thể có khả năng thay thế dữ liệu ban đầu băng dữ liệu giả
mạo
Chương 5: Non-repudation (Tính không thể chối bỏ):
Người gửi hay người nhận không thể chối bỏ sau khi đã gửi hoặc nhận thông tin.
I. Khái niệm về khóa (Key)
Password: là một hay nhiều từ mà người dùng phải biết để được cấp quyền truy cập.
Trong thực tế, mật khẩu do người dùng tạo ra thường không đủ độ an toàn để được dùng
trực tiếp trong thuật toán. Vì vậy, trong bất cứ hệ thống mã hóa dữ liệu nghiêm túc nào
cũng phải có bước chuyển đổi mật khẩu ban đầu thành chìa khóa có độ an toàn thích hợp.
Bước tạo chìa khóa này thường được gọi là key derivation, key stretching hay key
initialization.
Key Derivation Function: là một hàm hash (sẽ giải thích rõ hơn ở phần sau) được thiết
kế sao cho chìa an toàn hơn đối với tấn công kiểu brute-force hay cổ điển. Hàm này được
thực hiện lại nhiều lần trên mật khẩu ban đầu cùng với một số ngẫu nhiên để tạo ra một
chìa khóa có độ an toàn cao hơn. Số ngẫu nhiên này gọi là salt, còn số lần lặp lại là
iteration.
Ví dụ một mật khẩu là "pandoras B0x", cùng với salt là "230391827", đi qua hàm hash
SHA-1 1000 lần cho kết quả là một chìa khóa có độ dài 160 bit như sau:
là các kí tự trong Plaintext hoàn toàn không bị thay đổi bằng kí tự khác.
Ngoài ra còn một số phương pháp : Phương pháp Affine, Vigenere, Hill
II. Mã hóa đối xứng (mã khóa bí mật)
Ở phần trên, chúng ta đã tìm hiểu về mã hoá cổ điển, trong đó có nói rằng mã hoá cổ điển
không dùng khoá. Nhưng trên thực nếu chúng ta phân tích một cách tổng quát, chúng ta
sẽ thấy được như sau:
Mã hoá cổ điển có sử dụng khoá. Bằng chứng là trong phương pháp thay thế thì
khoá chính là phép dịch ký tự. Trong phương pháp mã hoá hoán vị thì khóa nằm ở
số hàng hay số cột mà chúng ta qui định. Khoá này có thể được thay đổi tuỳ theo
mục đích mã hoá của chúng ta, nhưng nó phải nằm trong một phạm vi cho phép nào
đó.
Để dùng được mã hoá cổ điển thì bên mã hoá và bên giải mã phải thống nhất với
nhau về cơ chế mã hoá cũng như giải mã. Nếu như không có công việc này thì hai
bên sẽ không thể làm việc được với nhau.
Mã hoá đối xứng còn có một số tên gọi khác như Secret Key Cryptography (hay
Private Key Cryptography), sử dụng cùng một khoá cho cả hai quá trình mã hoá và
giải mã. Quá trình thực hiện như sau:
Trong hệ thống mã hoá đối xứng, trước khi truyền dữ liệu, 2 bên gửi và nhận phải
thoả thuận về khoá dùng chung cho quá trình mã hoá và giải mã. Sau đó, bên gửi sẽ
mã hoá bản rõ (Plaintext) bằng cách sử dụng khoá bí mật này và gửi thông điệp đã
mã hoá cho bên nhận. Bên nhận sau khi nhận được thông điệp đã mã hoá sẽ sử
dụng chính khoá bí mật mà hai bên thoả thuận để giải mã và lấy lại bản rõ
(Plaintext).
Hình 3 : Trao đổi thông tin giữa bên gửi và bên nhận sử dụng phương pháp mã hoá đối xứng
Trong quá trình này, thì thành phần quan trọng nhất cần phải được giữ bí mật
chính là khoá. Việc trao đổi, thoả thuận về thuật toán được sử dụng trong việc mã hoá có
thể tiến hành một cách công khai, nhưng bước thoả thuận về khoá trong việc mã hoá và
giải mã phải tiến hành bí mật.
Mã hoá đối xứng có thể được phân thành 02 loại:
- Loại thứ nhất tác động trên bản rõ theo từng nhóm bits. Từng nhóm bits này được gọi
- Tiếp theo dữ liệu mã hoá cùng với Session Key đã mã hoá được gửi đi tới bên nhận.
- Lúc này bên nhận dùng khoá riêng để giải mã Session Key và có được Session Key ban
đầu.
- Dùng Session Key sau khi giải mã để giải mã dữ liệu.
Là không đối xứng vì những người mã hóa và kiểm chứng chữ ký không thể giải mã và
tạo chữ ký
Hình 4 : Sơ đồ mã hóa công khai
Mật mã bất đối xứng hoạt động chậm hơn phương thức mật mã đối xứng, không phải
nó mã hoá một khối lượng dữ liệu lớn. Nó thường đước sử dụng để bảo mật quá trình
truyền key của mật mã đối xứng. Nó cung cấp bảo mật cho quá trình truyền thông tin
bằng các dịch vụ: Authentication, Integrity, Protection, và nonrepudiation.
Phương thức mật mã bất đối xứng sử dụng: RSA, Diffie-Hellman, ECC, El Gamal,
CHƯƠNG 7: MỘT SỐ THUẬT TOÁN MÃ HÓA
I. Thuật toán mã hóa DES
DES thực hiện mã hóa dữ liệu qua 16 vòng lặp mã hóa, mỗi vòng sử dụng một khóa chu
kỳ 48bit được tạo ra từ khóa ban đầu có độ dài 56bit. DES sử dụng 8 bảng hằng số S-box
để thao tác
Cấu tạo một vòng của DES
Sử dụng hai nửa 32 bít trái và 32 bít phải.Nửa phải của vòng trước được chuyển qua
nửa trái của bước sau và lấy đầu ra của hàm vòng trên nửa phải và khoá con cộng cơ
số 2 với nửa trái. Có thể biểu diễn bằng công thức như sau:
L
i
= R
i–1
R
i
= L
i–1
xor F(R
o Ứng dụng thực tế trên cả phần cứng và phần mềm đều hiệu quả
a Quy trình mã hóa DES
Qúa trình mã hóa của DES có thể tóm tắt như sau: Biểu diễn thông tin nguồn x Є P
bằng dãy 64 bit, khóa k có 56 bit.Thực hiện mã hóa theo 3 giai đoạn:
Bước 1 : Tạo dãy 64 bit x
o
bằng cách hoán vị x theo hoán vị IP (Initial Permutation).
Biểu diễn x
o
= IP(x) = L
o
R
o
, L
o
gồm 32 bit bên trái x
o
, R
o
gồm 32 bit bên phải của x
o
Hình 6 : Biểu diễn dãy 64bit x thành 2 thành phần L và R
Ví dụ : IP(675a6967 5e5a6b5a) = (ffb2194d 004df6fb)
Bước 2 : Thực hiện 16 vòng lặp từ 64 bit thu được và 56 bit của khóa k (chỉ sử dụng 48
bit của khóa k trong mỗi vòng lặp ). 64 bit kết quả thu được qua mỗi vòng lặp sẽ là đầu
vào cho vòng lặp sau. Các cặp từ 32 bit Li, Ri với (1 ≤ i ≤ 16) được xác định theo qui tắc
sau : Li= R
i-1
Ri = L
i-1
Các bước xử lý của hàm f (A,J) như sau:
Tham số thứ nhất A (32 bit) được mở rộng thành dãy 48 bit bằng hàm mộ rộng E.
E(A) là một dãy 48 bit được phát sinh từ A bằng cách hoán vị theo một thứ tự nhất định
32 bit của A, trong đó 16 bit của A được lặp lại hai lần trong E (A)
Hình 7 :Qui trình phát sinh dãy LiRi từ dãy Li-1Ri-1 và khóa Ki
Thực hiện phép XOR cho hai dãy 48 bit E(A) và J, ta thu được một dãy 48bit B. Biểu
diễn B thành từng nhóm 6 bit như sau: B=B
1
B
2
B
3
B
4
B
5
B
6
B
7
B
8
Sử dụng 8 ma trận S
1
,S
2
, S
8
, với mỗi ma trận Si có kích thước 4x16 và mỗi dòng của
ma trận nhận đu 16 giá trị từ 0 đến 15. Xét dãy gồm 6 bit Bj = b
2
C
3
C
4
C
5
C
6
C
7
C
8
. Dãy 32 bit
thu được bằng cách hoán vị C theo một qui luật P nhất định chính là kết quả của hàm
F(A,J)
Hình 8 : Sơ đồ thuật toán mã hóa Data Encryption Standard (DES)
II. Thuật toán mã hóa AES (Rijndael)
Với tốc độ và khả năng xử lý ngày càng được nâng cao của các bộ vi xử lý hiện nay,
phương pháp mã hóa chuẩn (DES) trở nên không an toàn trong bảo mật thông tin.Do đó,
Viện Tiêu chuẩn và Công nghệ Hoa Kỳ ( NIST) đã quyết định chọn một chuẩn mã hóa
mới với độ an toàn cao nhằm phục vụ nhu cầu bảo mật thông tin liên lạc của chính phủ
Hoa Kỳ cũng như trong ứng dụng dân sự. Thuật toán Rijndael do Vincent Rijmen và Joan
Deaman đã được chính thức chọn trở thành chuẩn mã hóa nâng cao AES ( Advanced
Encryption Standard ) từ ngày 02-10-2000.
Phương pháp Rijndael là phương pháp mã hóa theo khối ( block cipher) có kích thước
khối và mã khóa thay đổi linh hoạt với các giá trị 128, 192 hay 256 bit. Phương pháp này
thích hợp ứng dụng trên nhiều hệ thống khác nhau từ các thẻ thông minh cho đến máy
tính cá nhân.
• Đặc trưng của thuật toán AES
• Sơ đồ mã hóa
Hình 13 : Sơ đồ mã hóa và giải mã thuật toán AES
III. Thuật toán mã hóa bất đối xứng RAS
Chương 8: Khái quát sơ lược thuật toán RSA
Trong mật mã học, RSA là một thuật toán 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ử đồ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.
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.
Chương 9: Quy trình mã hóa RSA
Khởi tạo khóa
Mỗi người sử dụng một cặp khóa công khai – riêng như sau
a. Chọn 2 số nguyên tố lớn p và q.
b. Tính tích n = p*q. Sau đó tính
φ
(n) = (p-1)(q-1).
c. Tìm số d sao cho d và
}
B7 : i ← i-1;
B8 : Nếu i != 1 thì quay lại bước 4
B9 : Data_out = d
B10 : Trả về data_out
CHƯƠNG 12: ỨNG DỤNG KỸ THUẬT MÃ HÓA
KHÓA CÔNG KHAI VÀO CHƯƠNG TRÌNH XÁC
THỰC CHỬ KÝ ĐIỆN TỬ.
Với sự phát triển của mạng Internet hiện nay, các doanh nghiệp nhanh chóng nhận
thấy lợi ích của việc sử dụng mạng Internet để mở rộng thêm mạng doanh nghiệp bao
gồm cả các đối tác, nhà cung cấp và nhất là thông qua Internet, các doanh nghiệp có thể
cung cấp các dịch vụ của mình đến với khách hàng thông qua các ứng dụng web.
Tuy nhiên, với việc mở rộng mạng doanh nghiệp đến nhiều đối tượng, doanh nghiệp bắt
buộc phải cung cấp dữ liệu thông tin của mình cho các đối tượng đó. Do vậy, vấn đề đặt
ra ở đây là khả năng đảm bảo an ninh mạng là một trong những yếu tố sống còn cho một
doanh nghiệp khi áp dụng mô hình thương mại điện tử. An ninh mạng bao gồm rất nhiều
các khía cạnh khác nhau. Một trong những khía cạnh được quan tâm nhất khi xem xét
một hệ thống an ninh mạng là giải pháp xác thực (Authentication) người dùng. Xác thực
là một quá trình mà đảm bảo cho một thực thể rằng phía đầu bên kia của kết nối đúng là
đối tượng mà thực thể đó cần giao tiếp. Trong thế giới thực, chúng ta hoàn toàn có thể
nhận biết một ai đó thông qua các đặc điểm sinh học như khuôn mặt, giọng nói hoặc
thậm chí chỉ là hình dáng hay những dấu hiệu khác. Tuy nhiên, xác thực trên mạng lại là
một vấn đề hoàn toàn khác bởi vì hai người làm việc với nhau trên mạng qua một khoảng
cách lớn về địa lý, do vậy cần có những giải pháp xác thực, mã hóa và toàn vẹn dữ liệu
trên mạng. Các thuật toán mã hóa đã được ứng dụng một cách linh hoạt và thiết yếu trong
việc thiết lập kết nối, tạo ra các chữ ký điện tử, an toàn dữ liệu . . đảm bảo an ninh cho
việc truyền tải file cũng như giao dịch thông qua Internet.
I. Ứng dụng trong chữ ký điện tử
jhjhj
Chương 13: Khái quát :
gọi là Message Digest được tính toán bằng cách áp dụng các thuật toán băm mã hoá
cryptographic hashing arthgorithm như MD2, MD4, MD5, SHA1,…Một hash-value
đã tính của message là một dãy bit liên tục, có độ dài cố định, được trích rút từ message
theo cách nào đó.
Tất cả các thuật toán chính xác cho việc tính toán message digest được cung cấp như một
phép biến đổi toán học, trong đó cứ một bit đơn từ input message được biến đổi thì một
digest khác được gửi đến. Với cách làm việc như vậy các thuật toán là rất bảo đảm độ tin
cậy trước các cuộc tấn công.
Bước 3: Tính Digital Signature
Trong bước hai của việc ký message, thông tin nhận được trong bước băm message
(Message Digest) đã mã hoá với khoá private key của người ký vào message, vì thế một
giá trị băm giải mã cũng được gọi là Digital Signature được gửi đến. Vì mục đích này,
các thuật toán mã hoá cho việc tính chữ ký số từ message digest được dùng. Thuật toán
thường được sử dụng là RSA, DIGITAL SIGNATUREA, ECDIGITAL SIGNATUREA.
Thông thường, chữ ký số gắn vào message trong định dạng đặc biệt để kiểm tra khi cần
thiết.
Hình 19 Quá trình ký trong message
Chương 15: Qúa trình kiểm tra xác nhận chữ ký trên tài liệu
Kỹ thuật Digital Signature cho phép người nhận message có kèm chữ ký kiểm tra tính
xác thực và tính toàn vẹn của nó. Quá trình kiểm tra chữ ký số - digital signature
verification nhằm mục đích xác định một message gửi đi đã được ký bằng khoá private
key đúng với khóa public key gửi đi hay không. Digital signature verification không
thể xác nhận có hay không một message đã được ký bởi người gửi. Nếu chúng ta muốn
kiểm tra có hay không vài người đã ký trong một message gửi đi, chúng ta cần nhận được
public key theo cách nào đó. Điều này thực hiện hoặc bằng cách lấy public key trong
cách an toàn (ví dụ như floppy disk hoặc CD) hoặc với sự trợ giúp của Public Key
Intrasfication theo một giấy chứng nhận số. Nếu không có một cách an toàn để nhận
khoá public key thực sự từ người gửi, chúng ta không có khả năng kiểm tra message
được gửi là có phải xác thực của người này hay không.
Như vậy, việc kiểm tra một Digital Signature được thực hiện trong 3 bước: