• Nguyên lý chủ yếu của encryption: Thông qua những thuật toán thích hợp, những ứng dụng có khóa thích hợp sẽ đưa thông tin trở lại trạng thái không mã hóa... Khóa này dùng để mã hóa
Trang 1MÃ HÓA DỮ LIỆU
TRONG PHP
Giảng viên hướng dẫn: ThS Mai Xuân Hùng
Sinh viên thực hiện:
Nguyễn Trần Tuấn Phong 09520604
Trần Anh Tuấn 09520710
1
Trang 2N i dung ội dung
• I Lý thuyết
• I.1 Encryption vs Hashing
• I.2 Các thuật toán Encryption được đề nghị
• I.3 Các hàm Hash được đề nghị
• I.4 Các thuật toán khác
• I.5 Blocks, Modes và Initialization Vectors
• I.6 Mcrypt, Hash và OpenSSL
• II Thực hành
2
Trang 3I LÝ THUY T ẾT
3
Trang 4I.1 Encryption vs
Hashing
4
Trang 5I.1.1 Encryption
• Nhu cầu: Muốn bảo vệ thông tin quan trọng, không cho
người tấn công đọc được những thông tin đó
• Nguyên lý chủ yếu của encryption: Thông qua những
thuật toán thích hợp, những ứng dụng có khóa thích hợp
sẽ đưa thông tin trở lại trạng thái không mã hóa
• Có 2 phương pháp chung để thực hiện mã hóa:
• Đối xứng (Symmetric)
• Bất đối xứng (Asymmetric)
5
Trang 6Mã hóa đ i x ng ối xứng ứng
(Symmetric)
• Đối xứng (Symmetric):
• Cả 2 bên đều giữ cùng một khóa Khóa này dùng
để mã hóa thông điệp và chỉ có thể dùng khóa này
để giải mã
• Loại mã hóa này nhanh và hiệu quả, nhưng nó yêu
cầu cả 2 bên đều giữ khóa.
• Một vài thuật toán sử dụng private key: AES,
Blowfish, 3DES.
6
Trang 7Mã hóa đ i x ng (Symmetric) ối xứng ứng
7
Trang 8Mã hóa b t đ i x ng ất đối xứng ối xứng ứng
(Asymmetric)
• Bất đối xứng (Asymmetric):
• Cả 2 bên không cần giữ cùng một khóa Mỗi bên
giữ một khóa trong một cặp khóa và thuật toán
được sử dụng cần chắc chắn rằng thông điệp được
mã hóa bởi một khóa chỉ có thể được giải mã bởi khóa kia.
• Một khóa được đánh dấu là “public”, được gửi đến
bất cứ ai muốn mã hóa thông điệp
• Một khóa được đánh dấu là “private”, được giữ bí
mật
• Một bên dùng “public key” để mã hóa và bên kia
sử dụng “private key” để giải mã.
• Các thuật toán: RSA.
8
Trang 9Mã hóa b t đ i x ng ất đối xứng ối xứng ứng
(Asymmetric)
9
Trang 10I.1.2 Hashing
• Nhu cầu: Giữ cho thông điệp không thay đổi trong quá
trình vận chuyển
• Nguyên lý chủ yếu của hasing: Một thuật toán hashing
tạo ra một giá trị độc nhất từ thông điệp đầu vào Không
thể chuyển đổi giá trị hashed trở về dạng thông điệp
ban đầu.
• Hashing không hữu ích trong việc vận chuyển thông tin,
nhưng nó rất hữu ích trong việc xác thực thông tin.
• Những thay đổi nhỏ nhất trong một thông điệp hàng
triệu gigabyte thì những giá trị hash vẫn khác nhau
10
Trang 11• Một giá trị hash có 3 đặc điểm quan trọng:
• Về mặt lý thuyết thì có thể tìm thấy bất cứ giá trị
plaintext nào để tạo ra cùng một giá trị hash, nhưng
thực tế thì không thể (Collisions).
• Cho một thông điệp và một thuật toán hash, thì giá trị
hash sẽ luôn luôn giống nhau
• Cho một thuật toán hash, những thông điệp tương tự
nhau sẽ tạo ra những giá trị hash khác nhau
11
Trang 1212
Trang 13I.2 Các thu t toán ật toán
Encryption đ ược đề ề c đ
nghị
13
Trang 14I.2.1 Nh ng thu t toán đ i x ng ững thuật toán đối xứng ật toán ối xứng ứng
• Cả 2 bên đều phải giữ cùng 1 khóa.
• Một khó khăn là: không gì đảm bảo việc vận chuyển
khóa từ bên này sang bên kia là an toàn.
• Nếu đảm bảo được điều này thì thuật toán đối xứng sẽ
cho mức bảo mật cao và dễ dàng mã hóa
• Các thuật toán sẽ được đề cập:
Trang 153DES (Triple-DES)
• Được phát triển vào những năm 1997 đến 1998 bởi
Walter Tuchman
• Một sự nâng cấp của DES (Data Encyption Standard).
• Thuật toán này thực hiện 3 lần mã hóa DES: Đầu tiên là
mã hóa Sau đó giãi mã và mã hóa tiếp với một khóa
khác
• Quá trình này cho chiều dài khóa lên đến 168 bit.
• Năm 1998, Stenfan Lucks, University ò Mannheim, đã
phát triển lý thuyết một phương pháp cracking 3DES
trong 2^90 bước tính
• Ngày nay, nó vẫn là một sự lựa chọn phổ biến cho sự mã
hóa những thông điệp không quan trọng
15
Trang 16AES (Advanced Encryption Standard)
• Joan Daemen và Vincent Rijmen đã công bố một thuật
toán gọi là Rijndael
• AES là một biến thể của Rijndael.
• 12/2001, AES được xem là người kế vị của DES.
• AES được thiết kế để sử dụng khóa 128 bit, những năm
sau nó được điều chỉnh để sử dụng khóa 192 hoặc 256
bit
16
Trang 17• Được đề xuất bởi Bruce Schneier vào năm 1994.
• Về tổng quát, nó được xem như là người thay thế cho
Trang 18RC4 (Rivest Cipher #4)
• Được phát triển vào năm 1987 bởi Ron Rivest.
• Nó là một sản phẩm độc quyền của RSA Security, Inc.
• RC4 là một kỹ thuật mã hóa được sử dụng với Wired
Equivalent Privacy (WEP) và Wi-fi Protected Access
(WPA) để bảo vệ mạng không dây.
18
Trang 19Diffie-Hellman-Merkle Key Exchange
• Năm 1976, Whitfield Diffie và Martin Hellman đã mô tả một
phương pháp đầu tiên về việc trao đổi khóa bí mật thông qua
đường truyền không bí mật.
• Mô tả:
• Một bên chọn base, là một con số từ 1 đến 256, sau đó gửi
base đó đến cho bên kia
• Mỗi bên sẽ xác định một con số bí mật để dùng để lũy thừa
base đó
• Sau đó, mỗi bên sẽ gửi kết quả vừa lũy thừa đến bên kia và
sử dụng nó như là một base khi thực hiện quá trình giống
như vậy với con số bí mật dùng để lũy thừa
• Kết quả là 2 bên sẽ nhận được một con số giống nhau sau
khi đã thực hiện quá trình trên.
• Trong thực tế, thuật toán này sử dụng những con số lớn hơn
và một kỹ thuật toán học phức tạp hơn.
19
Trang 21So sánh hi u năng c a 3DES, AES, ệu năng của 3DES, AES, ủa 3DES, AES,
Blowfish
• Cho dữ liệu có dung lượng 256MB.
• Được thực hiện trên máy có CPU P4 2.1GHZ chạy Windows XP
SP1.
Thuật toán Dữ liệu Thời gian (giây) Tốc độ trung bình
(MB/giây) Hiệu năng
21
Trang 22So sánh hi u năng c a 3DES, AES, ệu năng của 3DES, AES, ủa 3DES, AES,
Blowfish (tt)
22
Trang 23So sánh hi u năng c a 3DES, AES, ệu năng của 3DES, AES, ủa 3DES, AES,
Blowfish (tt)
• Encryption • Decryption
23
Trang 24So sánh hi u năng c a 3DES, AES, ệu năng của 3DES, AES, ủa 3DES, AES,
Blowfish (tt)
24
Trang 25So sánh m c đ b o m t c a 3DES, ứng ội dung ảo mật của 3DES, ật toán ủa 3DES, AES,
AES, Blowfish
25
Trang 26I.2.1 Nh ng thu t toán b t đ i ững thuật toán đối xứng ật toán ất đối xứng ối xứng
x ng ứng
• Mỗi bên nhận private key từ public key của bên kia,
private key dùng để giải mã, public key dùng để mã
hóa.
• Không có sự vận chuyển khóa.
• Những thuật toán này chậm hơn những thuật toán đối
xứng, bởi vì chúng yêu cầu sự phân tích những số nguyên
rất lớn để mã hóa và giải mã một cách hiệu quả
• Các thuật toán sẽ được đề cập:
• RSA
• PGP và GnuPG
Trang 27• Do Ron Rivest, Adi Shamir và Leonard Adleman của MIT
tạo ra trong suốt năm 1977
• Rivest và Shamir cố gắng phát triển một thuật toán
không thể phá vỡ, còn Adleman cố gắng phá vỡ mục đích
của 2 người kia
• RSA là thuật toán mã hóa thường được dùng nhất trong
thương mại ngày nay
• Nó được xây dựng trong những trình duyệt hiện đại và
được dùng tự động trong các giao tác an toàn
• Nó sử dụng một khóa cực kỳ lớn, ít nhất 1024 bit cho các
Trang 28PGP (Pretty Good Privacy) và
GnuPG
• PGP là một thuật toán được phát triển và được đưa ra
vào năm 1991 bởi Philip Zimmermann, dùng để mã hóa
những thông điệp trong email.
• PGP là một sự kết hợp giữa những thành phần của cả mã
hóa đối xứng và bất đối xứng.
• RFC 2440 đã định nghĩa một phiển bản Open Source của
PGP, nó đã được phát triển dưới sự bảo hộ của The
OpenPGP Alliance
• Phiên bản này hoàn toàn tương thích với PGP
• Tuân theo các tiêu chuẩn của OpenPGP, Free Software
Foundation đã phát triển Gnu Privacy Guard (GnuPG).
Trang 29S/MIME (Secure/Multipurpose
Internet Mail Extension)
• RSA Security đã phát triển giao thức S/MIME cho
Public-Key Cryptography Standard (PKCS) #7 nhầm mục đích mở
rộng dịch vụ mã hóa những thông điệp email.
• Nó được định nghĩa trong RFC 3851 Nó là đối thủ của
PGP
• S/MIME yêu cầu sử dụng trao đổi khóa RSA.
• Nó chỉ sử dụng khóa 40 bit.
• S/MIME không có thương mại như PGP, nhưng có hàm S/
MIME được xây dựng trong openssl của PHP
29
Trang 30I.3 Các hàm Hash
đ ược đề ề c đ ngh ị
30
Trang 31CRC32 (Cycle Redundancy Check 32)
• Dùng phép lấy dư của 2 để tạo ra một sự biểu diễn số
nguyên nhỏ của một khúc dữ liệu lớn Con số dữ liệu này
được gọi là checksum.
• CRC32 được đặt tên vì kích thước 32 bit của kết quả sau
khi hashing
• Khi dùng CRC để xác định lỗi, người gửi sẽ tính toán một
CRC và gửi nó đi kèm với nội dung Người dùng chỉ việc
tính toán lại CRC rồi so sánh CRC mà người gửi đã gửi
• Trong PHP có hàm crc32().
31
Trang 32MD5 (Message Digest 5)
• Được phát triển bởi Ron Rivest Được định nghĩa vào
năm 1992 trong RFC 1321
• Một phương pháp để tính toán một số 128 bit của bất cứ
thông điệp có chiều dài tùy ý
• Phiên bản thứ 5 của thuật toán được dùng rộng rãi nhất.
• MD5 được dùng để xác thực dữ liệu vì an toàn và con số
được sản sinh ra nhỏ hơn hơn CRC32
• Mặc dù 128 bit là một con số khổng lồ nhưng một
collision đã được tìm thấy vào 1996
• Nhưng MD5 vẫn là một phương pháp nhanh, mạnh và an
toàn
• Trong PHP có hàm md5().
32
Trang 33• Tháng 2/2005, một tổ chuyên gia đã công bố điểm yếu
của SHA-1 để giảm bớt số lượng thực hiện brute-force để
tạo ra một collision từ 2^80 đến 2^69
Trang 34DSA (Digital Signature Algorithm)
• Nó được thông báo vào ngày 19/5/1994.
• Được phát triển bởi NSA và NIST.
• Được thiết kế để sử dụng cho chữ ký số (những phiên
bản hashed của chữ ký được dùng để xác thực người gửi
thông điệp đó)
• DSA đã phổ biến và được sử dụng rộng rãi.
• Nó được xây dựng trong bộ mã nguồn mở OpenSSL và
OpenSSH
34
Trang 35So sánh hi u năng c a MD5, SHA1 ệu năng của 3DES, AES, ủa 3DES, AES,
Digest Performance in MegaBytes per Second
Trang 36So sánh hi u năng c a MD5, ệu năng của 3DES, AES, ủa 3DES, AES,
SHA1, SHA256, SHA 512
36
Trang 37I.4 Các thu t toán ật toán
khác
37
Trang 38• Được phát triển để cho phép vận chuyển những đính
kèm email nhị phân bằng cách thay đổi chúng thành
những ký tự có thể in được
• Một đoạn chuỗi mã hóa chứa một tập giới hạn các ký tự
và luôn kết thúc với ít nhất một dấu bằng
• Base64 không nên được dùng mã hóa những thông tin
quan trọng
38
Trang 39• SHA-2 có một chút thay đổi so với SHA-1, nó sử
dụng con số có chiều dài 256 hoặc 512, thậm chí
1024 bit.
• Ngoài việc độ dài số lớn hơn, thì nó đồng nhất
với SHA-1.
39
Trang 40• Được phát triển bởi một đội ngũ những nhà mã hóa của
Bỉ
• Nó được phát triển từ MD4 và được xem là một ứng cử
viên để thay thế SHA-1
• Phiên bản hiện tại sử dụng 256 và 320 bit.
• Nó là một phần trong bộ công cụ mã hóa OpenSSL.
40
Trang 41I.5 Blocks, Modes và
Initialization Vectors
41
Trang 42Streams và Blocks
• Stream cipher: sử dụng XOR giữa thông điệp chưa mã
hóa và một khóa
• RC4 là một ví dụ của stream cipher.
• Block cipher: phá vỡ các thông điệp chưa mã hóa và
chuyển thành những khối dữ liệu có cùng kích thước, sau
đó thực hiện tác động trên mỗi khối dữ liệu đó theo
lượt
• Nó giúp an toàn hơn.
42
Trang 43Streams và Blocks (tt)
43
Trang 44• Gồm có 4 loại:
• Electronic Codebook Mode
• Output Feedback Mode
• Cipher Feedback Mode
• Cipher Block Chaining Mode
44
Trang 451 Electronic Codebook Mode (ECB)
• Nguyên lý: mỗi block được mã hóa riêng, sau đó ta nối
các block đã được mã hóa thành văn bản đã được mã
hóa
• Ưu điểm: có hiệu quả rất tốt, việc mã hóa mỗi block
được tiến hành song song
• Nhược điểm: các khuôn mẫu của văn bản chưa được mã
hóa có thể xuất hiện như là khuôn mẫu trong văn bản
Trang 461 Electronic Codebook Mode (ECB) (tt)
ECB
Mã hóa sử dụng
Trang 472 Output Feedback Mode (OFB)
• Sử dụng một chuỗi các block dữ liệu gọi là keystream.
• Mỗi block trong keystream được mã hóa bằng cách sử
dụng khóa bí mật để tạo block tiếp theo
• Một keystream được tạo, nó sẽ XOR với những block
chưa mã hóa để tạo thành văn bản mã hóa.
• Mỗi keystream được tạo một cách độc lập với văn bản
gốc nên chế độ này có thể ngăn cản tất cả các lỗi
• Nếu một block có các bit bị lỗi, nó sẽ không ảnh hưởng
đến việc giải mã những block tiếp theo
• OFB không làm rò rỉ thông tin về khuôn mẫu trong văn
Trang 482 Output Feedback Mode (OFB) (tt)
48
Trang 493 Cipher Feedback Mode (CFB)
• CFB cũng sử dụng keystream
• Việc tạo ra nó hoàn toàn độc lập, tuy nhiên mỗi
keystream kế tiếp được tạo bằng cách mã hóa những
block văn bản mã hóa ở trước.
• Kết quả sẽ được XOR với giá trị của block văn bản gốc để
tạo ra văn bản mã hóa
• Ưu điểm: ngăn việc thao tác đoạn văn bản mã hóa trong
khi vận chuyển
• Bởi vì mỗi block của văn bản mã hóa đóng vai trò là
khóa của block kế tiếp
• Vì cơ chế liên hệ ngược này, CFB có thể gây rò rỉ thông tin
về những block liền kề nhau
49
Trang 503 Cipher Feedback Mode (CFB) (tt)
50
Trang 514 Cipher Block Chaining Mode (CBC)
• XOR mỗi block văn bản gốc với những block văn bản mã
hóa phía trước, sau đó mã hóa kết quả.
• Đây là chế độ an toàn cao nhất.
• Vì các khuôn mẫu trong văn bản gốc đã được làm tối
nghĩa trước khi những block văn bản gốc được mã
hóa
• Bất cứ thay đổi nào đến một block văn bản mã hóa sẽ
làm cho những block sau nó không thể giải mã được
• Nên chọn chế độ CBC khi làm việc.
51
Trang 524 Cipher Block Chaining Mode (CBC) (tt)
52
Trang 53Initialization Vectors (IV)
• Ngoại trừ ECB, các chế độ mã hóa sử dụng block đều phụ
thuộc vào việc mã hóa các block trước nó
• Các chế độ mã hóa trừ ECB đều cần một IV, đó là một
phần của dữ liệu nhị phân mà sẽ đóng vai trò như một
block “zero”.
• IV cũng được sử dụng trong các hàm random hoặc sử
dụng làm salt trong việc mã hóa
• IV phải được cung cấp để giải mã thông điệp.
53
Trang 54I.6 Mcrypt, Hash và
OpenSSL
54
Trang 55• Là một giao diện giúp tương tác đến thư viện mcrypt, hỗ
trợ nhiều thuật toán khác nhau
• Nó hỗ trợ những thuật toán toán mã hóa đây:
• 3DES, ARCFOUR, BLOWFISH, CAST, DES, ENIGMA,
GOST, IDEA (không miễn phí), LOKI97, MARS, PANAMA,
RIJNDAEL, RC2, RC4, RC6, SAFER, SERPENT, SKIPJACK,
TEAN, TWOFISH, WAKE, XTEA
55
Trang 56• Hash không yêu cầu thư viện ngoài và nó được kích hoạt
theo mặc định trong PHP 5.1.2
• Nó thay thế cho mhash cũ.
• Với hash, ta có thể tạo ra những giá trị hash hoặc HMAC
(Hash-based Message Authentication Code)
• Hỗ trợ những thuật toán sau:
• MD4, MD5, SHA1, SHA256, SHA384, SHA512, RIPEMD,
WHIRLPOOL, GOST, TIGER, HAVAL…
56
Trang 57• OpenSSL sử dụng những hàm trong OpenSSL project để
tạo và chứng thực chữ ký và niêm phong (mã hóa) và mở
niêm phong (giải mã) dữ liệu
• Ta có thể sử dụng OpenSSL để bảo vệ dữ liệu bằng cách
sử dụng mã hóa khóa công cộng với thuật toán RSA
57
Trang 58II TH C HÀNH ỰC HÀNH
58