Đi kèm với mã hoá là giải mã.Có rất nhiều loại thuật toán mã hoá cho dữ liệu máy tính, chúng được gọi tên theo thuật toán và có thể so sánh trực tiếp với nhau, ví dụ mã hoá 128-bit, Tr
Trang 1An Toàn Thông Tin
06520118 Hoàng Trường Giang
06520212 Cao Văn Huỳnh
Trang 3Tổng quan về mã hoá
Mã hoá là gì: Mã hoá là một tiến trình biến đổi
thông tin, sử dụng các thuật toán nhằm mục đích
không cho người khác có thể nắm bắt được nếu
thiếu một vốn thông số nhất định (key) để dịch
ngược
Đi kèm với mã hoá là giải mã.
Có rất nhiều loại thuật toán mã hoá cho dữ liệu máy tính, chúng được gọi tên theo thuật toán và có thể
so sánh trực tiếp với nhau, ví dụ mã hoá 128-bit,
Triple-DES, 2048-bit RSA.
Trong cùng một loại, dĩ nhiên một phép mã hoá
2048-bit RSA sẽ mạnh mẽ hơn phép mã hoá 1024-bit RSA.
Trang 4Tổng quan về mã hoá
Nhưng như vậy không có nghĩa là một phép mã hoá với độ dài dãy bit lớn được xem là an toàn.
Điều đó cho thấy một thuật toán mã hoá cực
mạnh sẽ chỉ hữu ít nếu được sử dụng ở đúng
những nơi cần thiết, không phải lúc nào cũng là tối ưu.
Với sự phát triển mạnh mẽ của mình, hầu hết các kênh thông tin đều lấy Internet làm nền tảng để phát triển Điều tất yếu sẽ nảy sinh là vấn đề An toàn thông tin, một ngày nào đó, bạn bỗng nhận
ra rằng, thông tin của bạn đang bị theo dõi.
Để vừa đảm bảo thông tin luôn kết nối, vừa đảm bảo yếu tố bảo mật của thông tin thì phương pháp tốt nhất là mã hoá thông tin.
Trang 5Tổng quan về mã hoá
Mật mã hóa được sử dụng phổ biến để đảm bảo an toàn cho
thông tin liên lạc Các thuộc tính được yêu cầu là:
Bí mật: Chỉ có người nhận đã xác thực có thể lấy ra được nội dung của thông tin chứa đựng trong dạng đã mật mã hóa của
nó Nói khác đi, nó không thể cho phép thu lượm được bất kỳ thông tin đáng kể nào về nội dung của thông điệp.
Nguyên vẹn: Người nhận cần có khả năng xác định được thông tin có bị thay đổi trong quá trình truyền thông hay không.
Xác thực: Người nhận cần có khả năng xác định người gửi và kiểm tra xem người gửi đó có thực sự gửi thông tin đi hay
không.
Trang 6Kĩ thuật mã hoá chung
Các kĩ thuật mã hoá đều sử dụng các khoá (key) làm tác nhân thực hiện việc khoá mã, thông thường khoá được thể hiện bằng độ dài của khoá tính theo bit, số bits càng lớn thì tính bảo mật của phép mã hoá càng cao, có thể hiểu
nôm na một khoá là một mật khẩu Thông thường, để
an toàn thì các khoá thường có độ dài
128bits, nghĩa là phương pháp tấn công vét cạn sẽ phải dò 2128 trường hợp
Trang 7Kĩ thuật mã hoá chung
Có 3 kĩ thuật mã hoá chính:
1.Mã hoá đối xứng (Symmetric-key algorithms)
- AES, IDEA, DES
2.Mã hoá bất đối xứng (Asymmetric cryptography - Public key cryptography) - RSA
3.Mã hoá một chiều (hàm băm):
Trang 8Kĩ thuật mã hoá chung
I Mã hoá đối xứng (Symmetric-key algorithms) - AES,
IDEA, DES
Là các thuật toán mã hoá và giải mã trong đó các khoá
(key) dùng cho việc mã hoá và giải mã có quan hệ ràng buộc với nhau (về mặt toán học) hoặc là như nhau.
Hạn chế của mã hoá đối xứng là khi trao đổi, khoá mã
phải được 2 bên nắm giữ, do vậy việc bảo vệ an toàn cho khoá mã là một việc hết sức khó khăn Do tính
chất này, để tránh rườm ra, người ta phân phối mã
khoá này bằng phương pháp mã hoá bất đối xứng khi
có một phiên giao dịch, lúc đó ít nhiều sẽ dễ dàng
quản lý mã khoá hơn thông thường.
Trang 9mã hoá bất đối xứng khi có một phiên giao dịch, lúc
đó ít nhiều sẽ dễ dàng quản lý mã khoá hơn thông
thường.
Ví dụ:
Ngày xưa, khi chưa có máy tính, người ta đã vận dụng phương pháp mã hoá đối xứng bằng một miếng bìa có đục lỗ theo ý của người viết mã (đóng vai trò là key),
áp miếng bìa lên một mặt giấy, các kí tự từ văn bản gốc sẽ lần lượt được ghi lên giấy qua các lỗ hổng,
Trang 10Mã hoá đối xứng
sau khi hoàn tất, các khoảng trống trên mặt
giấy sẽ được điền các kí tự ngẫu nhiên Có thể nhận xét ngay, việc giải mã thông tin đó hầu
như là không thể nếu không có miếng bìa (key)
để tra ngược lại.
Ngày nay người ta sử dụng nhiều thuật toán
thao tác trên bit (xor, shift) để biến đổi thông
tin cần được mã hoá, các phép toán này được
thực hiện hàng chục vòng lặp (các giai đoạn
monkey around) khiến cho việc dịch ngược là vô
cùng khó khăn nếu không có key.
Trang 11thông tin, một chỉ cần public hoá mã khoá công khai của mình (Public key), người khác dựa vào
mã public đó để mã hoá thông điệp cần được
gửi.
Trang 12lệch thì đó chính là chữ kí của bạn.
Trang 13Mã hoá một chiều
III Mã hoá một chiều (hàm băm):
Tên gọi của nó đã gợi lên ý niệm là chuỗi mã
hoá không thể bị dịch ngược lại Người ta đã
chứng minh được rằng, mỗi chuỗi đã mã hoá chỉ
có thể là ánh xạ của duy nhất một chuỗi chưa
mã hoá nhập vào ; có nghĩa là một mật khẩu chỉ
có thể được mã hoá ra một chuỗi duy nhất và
ngược lại
Các thuật toán mã hoá một chiều được dùng
nhiều trong quá trình xác thực, lưu mật khẩu, thông tin thẻ tín dụng… Nền tảng của loại này
có thể xếp vào cùng loại với mã hoá đối xứng
Trang 14Mã hoá một chiều
Theo nhận xét được ghi trong chuẩn FIPS 180-2:
1) Cho một giá trị băm nhất định được tạo nên bởi một trong những thuật giải SHA, việc tìm lại được đoạn dữ liệu gốc là không khả thi.
2) Việc tìm được hai đoạn dữ liệu nhất định có cùng kết quả băm tạo ra bởi một trong những thuật giải SHA là không khả thi Bất cứ thay
đổi nào trên đoạn dữ liệu gốc, dù nhỏ, cũng sẽ tạo nên một giá trị băm hoàn toàn khác với xác suất rất cao.
Trang 15Mã hoá một chiều
Trong giao dịch điện tử, chìa khoá chính là
mật khẩu mà người sử dụng đã chọn lựa sẽ
được dùng để mã hoá thông tin của khách
hàng, còn mật khẩu sẽ được mã hoá theo hàm băm một chiều, các hackers hay thậm chí là admin của trang giao dịch dù có lấy được dữ liệu lưu trên máy chủ cũng không thể nào
dịch ngược nếu không biết được mật khẩu
(key) của user
Trang 16 MD5 chuyển đổi thông tin có chiều dài bất kì thành một chuỗi
có độ dài 128 bit không đổi với xác suất khác biệt cao, được biểu diễn bằng 32 số mã hex.
- MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6
- MD5("The quick brown fox jumps over the lazy eog")
= ffd93f16876049265fbaef4da268dd0e
- MD5("") = d41d8cd98f00b204e9800998ecf8427e
Trang 17Mã hoá một chiều
MD5 rất khó để có thể giải mã ngược chiều Hiện nay cách đơn giản và hiệu quả nhất của việc giải mã MD5 là dựng các databases của các giá trị mã hoá MD5, trước tiên hackers
cung cấp các công cụ cho phép người dùng xem mã MD5 của một chuỗi người dùng nhập vào, kết quả sẽ được trả về đồng thời nó cũng được lưu vào DB trong máy chủ, dần dần tạo nên một khối DB khổng lồ
http://gdataonline.com
Trang 18Mã hoá một chiều
Ở thuật toán MD5 cải tiến, ngoài giá trị nhập vào của người dùng (thường là password) máy tính sẽ tạo thêm một mã ngẫu nhiên (random salt) được sinh và lưu ở máy chủ để “trộn” 2 lần vào chuỗi nhập của người dùng sau đó
mới MD5 kết quả cuối cùng
return md5( md5( $salt ) $md5_once_password );
Trang 19Ứng dụng thực tiễn
IV Ứng dụng thực tiễn
Trong việc mã hoá truyền thông trên Internet, nổi bật hiện nay là giao thức SSL (Secure Socket Layer), áp dụng cả 3 kĩ thuật mã hoá trên.
SSL là giao thức đa mục đích được thiết kế để tạo ra các giao tiếp giữa hai chương trình ứng dụng trên một cổng định trước (socket 443) nhằm mã hoá toàn bộ thông tin đi/đến, mà ngày nay được sử dụng rộng rãi cho giao dịch điện tử như truyền số hiệu thẻ tín dụng, mật khẩu, số bí mật cá nhân (PIN) trên
Internet.
Trang 20Ứng dụng thực tiễn
Chúng ta chỉ phân tích cơ chế để hiểu rõ thêm ứng dụng của các kĩ thuật mã hoá vào giao thức này.
Điểm cơ bản của SSL được thiết kế độc lập với tầng ứng dụng để đảm bảo
tính bí mật, an toàn
và chống giả mạo
luồng thông tin qua
Internet giữa hai ứng
dụng bất kỳ
Trang 21message) và gởi nó đến Bob:
Trang 231 Digest
Thay vì phải mã hóa toàn bộ message nhận được từ Alice, Bob có thể xây dựng một bản tóm tắt (digest) của message bằng hàm băm một chiều (hash one-way), sau đó mã hóa digest bằng khóa riêng (private key) của mình và gởi cho Alice Alice sẽ dùng khoá công khai (public key) của Bob
để giải mã digest do Bob gởi tới và tính digest của
message đã được gởi đi, sau đó so sánh hai digest này với nhau Nếu trùng nhau, có nghĩa Alice có thể tin chắc là
mình đang nói chuyện với Bob
Trang 24Digest thực chất là chỉ là một số nguyên (integer) Hai
thuật toán phổ biến được dùng để tạo digest là MD5 hash 128bit, SHA hash 160 bit Ai đó có được digest của Bob cũng không thể nào suy luận ra được message nguyên
bản(original) vì digest chỉ là giá trị hash một chiều Hai message khác nhau sẽ có digest khác nhau, khả năng trùng nhau xấp xỉ là 0
Trang 252 Chữ kí điện tử (digital signature)
Trang 26Theo cách ở trên thì Bob đã kí (sign) message do Alice gởi tới, nhưng nếu như ai đó đã thay đổi message này thì sao? Vì vậy cần thay đổi một chút như sau:
A->B Chào, Có phải Bob đó không?
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}
Trang 27Như bạn thấy Bob không hề kí message của Alice Thay vào đó, Bob sẽ gởi một mesage khác (không bị mã hóa) và digest của của message này (đã được mã hóa bằng khóa riêng (private key) của Bob) đến cho Alice Bob chỉ tin
tưởng vào chính mình Alice dễ dàng thẩm tra Bob bằng cách dùng khoá công khai (public key) của Bob giải mã digest nhận được, sau đó tính digest của message nhận từ Bob và so sánh hai digest này với nhau Digest mà Bob
gởi tới Alice chính là một chữ kí điện tử Nó kí cho
message "Alice, Mình là Bob đây!" để đảm bảo chắc chắn
là message này không bị ai đó thay đổi gì khi đến Alice Nếu thay đổi Alice sẽ biết ngay qua việc thẩm tra digest
Trang 283 Trao khoá công khai (public key)
Bob trao khoá công khai (public key) của mình cho Alice bằng cách nào? Bạn hãy xem thử giao thức sau:
A->B Xin chào!
B->A Chào, Mình là Bob Đây là public key của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}
Trang 29Như bạn thấy Bob không hề kí message của Alice Thay vào đó, Bob sẽ gởi một mesage khác (không bị mã hóa) và digest của của message này (đã được mã hóa bằng khóa riêng (private key) của Bob) đến cho Alice Bob chỉ tin
tưởng vào chính mình Alice dễ dàng thẩm tra Bob bằng cách dùng khoá công khai (public key) của Bob giải mã digest nhận được, sau đó tính digest của message nhận từ Bob và so sánh hai digest này với nhau Digest mà Bob
gởi tới Alice chính là một chữ kí điện tử Nó kí cho
message "Alice, Mình là Bob đây!" để đảm bảo chắc chắn
là message này không bị ai đó thay đổi gì khi đến Alice Nếu thay đổi Alice sẽ biết ngay qua việc thẩm tra digest
Trang 30Bob trao khoá công khai (public key) của mình cho Alice bằng cách nào? Bạn hãy xem thử giao thức sau:
A->B Xin chào!
mình!
B->A Alice, Mình là Bob đây!
private_Bob{digest[“ Alice, Mình là Bob đây! ”]}
Trang 31Với cách này thì ai cũng có thể giả mạo Bob và trao khoá công khai (public key) của họ cho Alice, làm cho Alice tưởng lầm là mình đang nói chuyện với Bob
Để giải quyết vấn đề này, Alice và Bob có thể dùng giấy chứng nhận điện tử
Trang 324 Giấy chứng nhận điện tử (digital certificate)
Giấy chứng nhận điện tử dùng để chứng nhận khoá công khai (public key) của một cá nhân nào đó
Một giấy chứng nhận điện tử thường bao gồm các thứ sau:
- Tên cơ quan cấp giấy chứng nhận (issuer's name)
- Tên thực thể (entity) được cấp giấy chứng nhận (còn được gọi là đối tượng - subject)
- Khoá công khai (public key) của subject
- Tem thời gian (time-stamps) cho biết thời gian có hiệu lực của giấy chứng nhận
Trang 33có thể tạo ra một CA mới cho riêng cho mình
Chúng ta hãy xem giao thức mới này:
A->B Xin chào!
B->A Chào, Mình là Bob Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
Trang 34 Bằng cách gửi Giấy chứng nhận điện tử (digital certificate) của mình cho Alice (có nghĩa là alice sẽ biết khoá công khai của Bob) thì bắt buộc thông điệp phải được mã hoá bằng chính private key của Bob thì Alice mới xác nhận được.
Ai đó dùng giấy chứng nhận của Bob để giả mạo Bob sẽ bị Alice phát hiện ngay!
A->M Xin chào
M->A Chào, Mình là Bob Đây là giấy chứng nhận của mình!
A->M Hãy đưa bằng chứng đi!
M->A ???
Mallet không biết khóa riêng (private key) của Bob nên không thể xây dựng được message để Alice có thể tin mình là Bob.
Trang 35Sau khi Alice đã xác thực mình đang nói chuyện với Bob, Alice sẽ gởi cho Bob một message đã bị mã hóa bằng khoá công khai (public key) của Bob:
Bằng cách này, chỉ có Bob mới có thể giải mã
message trên và lấy được khóa bí mật bởi vì chỉ có Bob mới biết được khóa riêng (private key) để giải
mã Trao đổi khóa bí mật bằng công nghệ khoá công khai (public key) cực kì an toàn.
Trang 36Không một ai ngoại trừ Alice và Bob biết được khóa bí mật Trong SSL, khóa bí mật này chính là khóa phiên giao dịch giữa 2 người ở thời điểm đó (session key) Kể từ đây Alice và Bob sẽ dùng khóa phiên để trao đổi dữ liệu cho nhau Khóa phiên được tạo ra trong mỗi phiên kết nối SSL
và hoàn toàn bí mật (chỉ có Alice và Bob biết) nên rất an toàn Công nghệ chuyên chở khóa phiên bằng khoá công khai (public key) và dùng khóa phiên như một khóa đối xứng bí mật để trao đổi dữ liệu cho nhau còn được biết
đến với cái tên là hybrid, tức là kết hợp cả hai phương
pháp mã hóa dùng kĩ thuật mã hoá đối xứng và mã hoá bất đối xứng
Trang 37 Đây là giao thức mới:
A->B Xin chào!
B->A Chào, Mình là Bob Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây! ”]}
A->B Ok Bob, Đây là khoá bí mật của chúng ta
public_Bob{“ khóa_bí_mật ”}
B->A khóa-bí-mật{message 1}
B->A khóa-bí-mật{message 2 }
Trang 38
6 Tấn công man-in-the-middle
Giao thức trên chưa phải là an toàn tuyệt đối Mallet ngồi giữa Alice
và Bob có thể chơi trò tấn công man-in-the-middle như sau:
A->M Xin chào!
M->B Xin chào!
B->M Chào, Mình là Bob Đây là giấy chứng nhận của mình!
M->A Chào, Mình là Bob Đây là giấy chứng nhận của mình!
A->M Hãy đưa bằng chứng đi!
M->B Hãy đưa bằng chứng đi!
Trang 39B->M Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây! ”]}
M->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây! ”]}
A->M Ok Bob, đây là khoá bí mật của chúng ta public_Bob{“khóa_bí_mật ”}
M->B Ok Bob, đây là khoá bí mật của chúng ta public_Bob{“khóa_bí_mật ”}
Trang 40Để ngăn chặn cuộc tấn công man-in-the-middle trên, Alice và Bob có thể dùng thêm mã xác thực thông
điệp (Message Authentication Code) thường được gọi tắt là MAC Thuật toán tạo MAC khá đơn giản:
Code:
MAC = Digest[some message, khóa bí mật]
Mallet không biết khóa bí mật nên không tài nào tính đúng giá trị digest của message.
Trang 41SSL
Trang 42Toàn bộ cấp độ bảo mật và an toàn của thông tin/dữ liệu phụ thuộc vào một số tham số:
(i) Số nhận dạng theo phiên làm việc ngẫu nhiên
(session ID);
(ii) Cấp độ bảo mật của các thuật toán bảo mật áp dụng cho SSL;
(iii) Độ dài của khoá chính (key length) sử dụng cho lược
đồ mã hoá thông tin.
Trang 43 PGP Desktop (http://na.store.pgp.com) - 99USD
Encrypt & Decrypt MD5 Hashes -
http://md5encryption.com/