ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH
PHƯƠNG PHÁP TOÁN TRONG TIN HỌC
TÌM HIỂU THUẬT TOÁN MÃ HÓA
DES - Data Encryption Standard
Giảng viên:PGS.TS Đỗ Văn Nhơn
Học viên:Phạm Minh Tiến
MSHV: CH1301034
Ngày 25 tháng 12 năm 2013
MỤC LỤC
DES | 2
MỞ ĐẦU
Khi nhu cầu trao đổi thông tin dữ liệu ngày càng lớn và đa dạng, các tiến bộ
về điện tử - viễn thông và công nghệ thông tin không ngừng phát triển ứng dụng để
nâng cao chất lượng và lưu lượng truyền tin thì các quan niệm ý tưởng và biện pháp
bảo vệ thông tin dữ liệu cũng được đổi mới. Bảo vệ an toàn thông tin dữ liệu là một
chủ đề rộng, có liên quan đến nhiều lĩnh vực và trong thực tế có rất nhiều phương
pháp được thực hiện để bảo vệ an toàn thông tin dữ liệu. Một trong các biện pháp
hữu hiệu nhất hiện nay là mã hóa.Khái niệm mã hóa dữ liệu đề cập đến những phép
tính toán học và chương trình thuật toán chuyển văn bản gốc thành dạng văn bản
mã hóa, đây là một dạng thức khiến cho những người không được ủy quyền không
thể đọc được. Người nhận tin nhắn mã hóa sẽ sử dụng một khóa tạo nên cơ chế
thuật toán để giải mã dữ liệu, chuyển nó trở về phiên bản văn bản ban đầu.
Trước khi có Internet, phương pháp mã hóa dữ liệu rất ít khi được sử dụng
rộng rãi vì nó được coi là công cụ bảo đảm an ninh trong lĩnh vực ngoại giao và
quân sự nhiều hơn. Tuy nhiên từ khi dịch vụ ngân hàng, mua sắm trực tuyến và các
dịch vụ khác trở nên phổ biến thì ngay cả những người chỉ có nhu cầu sử dụng
Internet cơ bản tại nhà cũng biết đến mã hóa dữ liệu.
Một số giải pháp mã hóa dữ liệu tối ưu có thể được sử dụng qua nhiều thế
kỷ, trong khi các phương pháp giải mã khác có thể bị phá vỡ bởi những người có kỹ
năng về lĩnh vực này trong thời gian ngắn.
Một số chuẩn mã hóa dữ liệu phổ biến là: DES, AES (Advanced Encryption
Standard - Tiêu chuẩn mã hóa nâng cao),…
Thuật toán mã hóa khối ra đời sớm và có nhiều ảnh hưởng là thuật toán
DES(Data Encryption Standard - Tiêu chuẩn mã hóa dữ liệu).
Sau đây, chúng ta sẽ tìm hiểuvềDES.
DES | 3
KHÁI NIỆM CƠ BẢN VỀ MÃ HÓA VÀ GIẢI MÃ
1. Khái niệm
Mã hóa là một quá trình che dấu thông tin, biến đổi thông tin ở dạng đọc
được thành dạng khác (có thể vô nghĩa). Và chỉ có người có khóa mới có thể giải
mã được thông tin này thành dạng đọc được ban đầu.
Chuỗi đã mã hóa
Hình: Mô tả mã hóa giải mã
Các thuật ngữ thường dùng trong mã hóa và giải mã:
• Cryptosystem (Cryptographic System):đây là hệ thống mã hóa thông tin, có
thể là phần mềm như PGP, Ax-Crypt, Truecrypt giao thức như SSL, IPsec
dùng trong Internet hay đơn giản là một thuật toán như DES.
• Encrypt (Encipher, Encryption):gọi là mã hóa – đó là quá trình biến đổi
thông tin từ dạng ban đầu - có thể hiểu được thành dạng không thể hiểu
được, với mục đích giữ bí mật thông tin đó.
• Decrypt (decipher, decryption):gọi là giải mã – đó là quá trình ngược lại với
mã hóa, khôi phục lại thông tin ban đầu từ thông tin đã được mã hóa.
• Plain text/message: là thông điệp ban đầu chưa được mã hóa.
• Cipher text/message:là chuỗi thu được sau khi mã hóa.
• Cipher : là thuật toán sử dụng để thực hiện quá trình mã hóa hay giải mã.
• Key: là chìa khóa –khóa cung cấp thông tin cần cho qui trình mã hóa và giải
mã.
2.Các nguyên lý của bảo mật và mã hóa
Có 4 nguyên lý chính:
o Tính bí mật (Confidentiality / Privacy).
o Tính toàn vẹn (Integrity).
o Tính xác thực (Authentication).
o Tính không chối bỏ (Non-repudiation).
o Tính nhận dạng (Identification).
DES | 4
Khóa
Thông tin
gốc
Giải mã
Khóa
Mã hóaThông tin
cần mã
hóa
@#$
3.Các dạng thuật toán mã hóa
a/ Dạng cổ điển:
-Substitution: sự thay thế – đây là phương pháp mã hóa mà từng kí tự (hoặc
từng nhóm kí tự) của thông điệp ban đầu được thay thế bằng một (hay một nhóm)
thông điệp khác. Phương pháp này không còn được sử dụng nhưng ý tưởng của
phương pháp này vẫn được sử dụng là tiền đề trong những thuật toán hiện đại.
-Transposition: sự hoán vị – đây là phương pháp mã hóa trong đó các ký tự
của thông điệp ban đầu thay đổi vị trí cho nhau còn bản thân các thông điệp không
hề bị thay đổi.
b/Phương pháp hiện đại:
+ Symmetric cryptography (mã hóa đối xứng): tức là cả hai quá trình mã hóa
và giải mã đều dùng một chìa khóa. Để đảm bảo tính an toàn, chìa khóa này phải
được giữ bí mật. Vì thế các thuật toán loại này còn có tên gọi khác là secret key
cryptography (hay private key cryptography). Các thuật toán loại này thường được
dùng cho mục đích mã hóa dữ liệu của cá nhân hay tổ chức đơn lẻ nhưng bộc lộ hạn
chế khi thông tin đó phải được chia sẻ với một bên thứ hai.
Block ciphers: thuật toán khối – trong đó từng khối dữ liệu trong văn
bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài.
Độ dài mỗi khối gọi là block size, thường được tính bằng đơn vị bit.
Ví dụ: DES, 3DES…
Stream ciphers: thuật toán dòng – trong đó dữ liệu đầu vào được mã
hóa từng bit một. Các thuật toán dòng có tốc độ nhanh hơn các thuật
toán khối, được dùng khi khối lượng dữ liệu cần mã hóa chưa được
biết trước, ví dụ trong kết nối không dây. Có thể coi thuật toán dòng
là thuật toán khối với kích thước mỗi khối là 1 bit. Một số thuật toán
dòng thông dụng: RC4, A5/1, A5/2, Chameleon
+Asymmetric cryptography(mã hóa bất đối xứng) sử dụng một cặp chìa khóa
có liên quan với nhau về mặt toán học, một chìa công khai dùng để mã hoá (public
key) và một chìa bí mật dùng để giải mã (private key). Một thông điệp sau khi được
mã hóa bởi chìa công khai sẽ chỉ có thể được giải mã với chìa bí mật tương ứng. Do
các thuật toán loại này sử dụng một chìa khóa công khai (không bí mật) nên còn có
tên gọi khác là public-key cryptography (thuật toán mã hóa dùng chìa khóa công
khai). Một số thuật toán bất đối xứng thông dụng là : RSA, Elliptic Curve, ElGamal,
Diffie Hellman
4.Một vài thuật toán mã hóa nổi tiếng
DES (Data Encryption Standard).
One-time Pad (OTP).
AES (Advance Encryption Standard).
RSA.
DES | 5
DES | 6
I.GIỚI THIỆU
Thuật toán DES(Data Encryption Standard) là một thuật toán mã hóa được
dùng rộng rãi nhất trên thế giới. Trong nhiều năm và đối với nhiều người việc mã
hóa bảo mật và DES là một. Bất chấp việc nhiều cỗ máy được tạo ra để bẻ khóa
DES điển hình như cổ máy trị giá $220000 của Electronic Frontier Foundation,
DES vẫn tồn tại trong các ngân hàng cũng như chính phủ bằng việc cải thiện qua
nhiều phiên bản như “Triple-DES”.
Kể từ khi DES ra đời, nhiều thuật toán mã hoá bảo mật khác cũng được phát
triển tương tự DES hoặc dựa trên DES, một khi nắm được các nguyên tắc của DES
bạn sẽ dễ dàng hiểu các thuật toán này.
15-5-1973 dưới thời của Tổng Thống Richard Nicxon, Cục Tiêu Chuẩn Liên
Bang Hoa Kỳ đã công bố một thông báo trên Công báo Liên Bang mời đề xuất các
thuật toán mã hóa đễ bảo vệ dữ liệu trong quá trình truyền và lưu trữ. Thông báo đã
nêu rõ lý vai trò quan trọng của việc mã hóa dữ liệu.
Trong thập kỷ qua, đã có sự tăng tốc mạnh mẽ trong tích luỹ và truyền dữ
liệu của ngành công nghiệp, chính phủ và của các tổ chức khác trong khu vực tư
nhân. Phần lớn những nội dung truyền đi là những tài liều nhạy cảm và quan trọng
như việc chuyển tiền, hợp đồng, email, thông tin cá nhân, các hoạt động ngầm của
chính phủ… Với sự tăng nhanh không ngừng về khối lượng giá trị cũng như tính
chất của nhủng thông tin được lưu trũ cũng như truyền đi điều này dẫn đến yêu cầu
cần có những giải thuật cần thiết đễ mã hóa các thông điệp này.
Sau một thời gian chờ đợi, nhiều đề xuất về thuật toán mã hóa đã được đưa
ra tuy nhiên không đáp ứng được yêu cầu đề ra. Đến ngày 6 tháng 8 năm 1974, ba
ngày trước khi Nixon từ chức, IBM đã đưa ra thuật toán Lucifer. Thuật toán này đã
được đánh giá với sự trợ giúp của Cơ quan An ninh Quốc Gia (NSA) và vượt qua
hầu hết các tiêu chuẩn được đưa ra của Cục tiêu chuẩn Liên bang Hoa Kỳ. Sau một
số sửa đổi Cục tiêu chuẩn Liên bang Hoa Kỳ chính thức công nhận thuật toán
Lucifer và đổi tên thành Data Encryption Standard (DES) vào 15 tháng 7 năm 1977.
DES đã nhanh chóng được áp dụng trong lĩnh vực truyền tín hiệu như đường
dây điện thoại công cộng. Ví dụ trong vòng một vài năm hãng International Flavors
and Fragrances đã sử dụng DES đễ bảo vệ các công thức sản xuất của mình khi
truyền qua điện thoại ("With Data Encryption, Scents Are Safe at IFF,"
Computerworld 14, No. 21, 95 (1980)).
Trong khi đó lực lượng có nhu cầu mã hóa dữ liệu lớn nhất bên ngoài chính
phủ đó là các ngân hàng đã sử dụng DES như chuẩn mã hóa dữ liệu chính của mình
khi thực hiện các giao dịch. DES đã được American National Standards
Institute(ANSI) chứng nhận là chuẩn mã hóa dự liệu trong giao dịch của ngân hàng
vào năm 1980.
DES | 7
DES | 8
II. TỔNG QUAN
Giải thuật DES được phát triển tại công ty IBM dựa trên hệ mã hóa LUCIFER của
Feistel.
DES là một thuật toán mã hóa khối (block cipher) nghĩa là chuỗi cần mã hóa
sẽ được đóng thành những khối có kích thước 64 bit và trả về một chuỗi đã được
mã hóa có kích thước tương đương.Thực sự mà nói DES chính là kết quả của phép
hoán vị (permutation) bằng 2
64
vị trí có thể của chuỗi 64 bit trong số đó có thể là 0
hoặc 1. Mỗi khối 64 bit này được chia thành 2 khối 32 bit bằng nhau, nửa khối bên
trái L và nữa khối bên phải R. (Sự phân chia này chỉ sử dụng trong những hoạt động
nhất định). Do quá trình mã hóa và giải mã chỉ sử dụng một “khóa ” nên DES thuộc
loại mã hóa đối xứng (Symmetric cryptography).
Hình. Mô hình mã hóa đối xứng
Khóa mã có độ dài 64 bit, trong đó có 8 bit chẵn lẻ được sử dụng để kiểm
soát lỗi. Các bit chẵn lẻ nằm ở các vị trí 8, 16, 24,… , 64. Tức là cứ 8 bit khóa thì có
1 bit kiểm soát lỗi, bit này qui định số bit có giá trị 1 của khối 8 bit đó theo tính bù
chẵn.
Nền tảng để xây dựng khối của DES là sự kết hợp đơn giản của các kỹthuật
thay thế và hoán vị bản rõ dựa trên khoá. Đó là các vòng lặp. DES sửdụng 16 vòng
lặp, nó áp dụng cùng một kiểu kết hợp của các kỹ thuật trên khối bản rõ 16 lần.
DES | 9
Hình. Sơ đồ mã DES
Thuật toán chỉ sử dụng các phép toán số học và lôgíc trên các số 64 bít, vì
vậy nó dễ dàng thực hiện vào những năm 1970 trong điều kiện về công nghệ phần
cứng lúc bấy giờ. Ban đầu, sự thực hiện các phần mềm kiểu này rất thô sơ, nhưng
hiện tại thì việc đó đã tốt hơn, và với đặc tính lặp đi lặp lại của thuật toán đã tạo nên
ý tưởng sử dụng chíp với mục đích đặc biệt này.
DES | 10
DES làm việc trên bit hoặc số nhị phân 0/1. Một nhóm 4 bit tạo thành một số
trong hệ Hex. Ví dụ ta có số nhị phân “0001” thì trong hệ hex sẽ có giá trị bằng “1”,
số “1000” có giá trị bằng “8”, “1001” có giá trị bằng “9”, “1010” có giá trị bằng
“A” và “1111” có giá trị bằng “F”.
DES làm việc bằng cách mã hóa thông điệp gồm 64 bit tương đương với 16
số hexa. Để mã hóa được DES sử dụng “khóa” tương đương với chiều dài của 16
hexa hay 64 bit tức 8byte, nhưng các bit thứ 8 tròn các byte này bị bỏ qua do đó độ
lớn thực tế của “khóa” chỉ là 56 bit.
Ví dụ bạn cần mã hóa thông điệp sau “8787878787878787” sử dụng khóa
"0E329232EA6D0D73" thì sau khi mã hóa bằng DES bạn sẽ thu được một chuỗi đã
mã hóa là “0000000000000000”. Nếu thực hiện giải mã chuỗi đã được mã hóa đó
bằng key đã được sử dụng ta sẽ thu được chuỗi ban đầu.
Ví dụ trên rất rõ ràng với thông điệp được mã hóa có chiều dài là 64 bit.
Trường hợp tương tự xảy ra nếu thông điệp có chiều dài là bội của 64 bit. Tuy nhiên
trong nhiều trường hợp chuỗi mã hóa không có chiều dài như vậy. Xét trường hợp
thông điệp sau: “Your lips are smoother than vaseline” thông điệp trên có 36 byte
tương đương 76 số hexa do đó nó cần được thêm vào cuối một số byte vào cuối
đoạn mật mã và khi giải mã ta sẽ xóa nhưng byte thêm vào này. Các byte thêm vào
sao cho thông điệp đã cho trở thành bội của 8bytes, 64 bit, hoặc 16 số hexa.
Thông điệp “Your lips are smoother than vaseline” trong mã hexa có dạng:
“596F7572206C6970732061726520736D6F6F74686572207468616E2076617365
6C696E650D0A”
thông điệp chỉ chứa 72 số hexa do đó ta thêm vào cuối chuỗi các số 0 để đủ 80
sốhexa
“596F7572206C6970732061726520736D6F6F74686572207468616E2076617365
6C696E650D0A0000”
sau đó ta sử dụng một “khóa” DES 64 bit “0E329232EA6D0D73” ta sẽ thu được
chuỗi cần mã hóa:
“C0999FDDE378D7ED727DA00BCA5A84EE47F269A4D64381909DD52F78F53
58499 828AC9B453E0E653”
DES | 11
III. THUẬT TOÁN
Bước 1. Tạo khóa con
Hình: Quá trình tạo khóa con
Đầu tiên, từ 64 bit ban đầu của khóa, 56 bit được chọn (Permuted Choice 1, hay
PC-1); 8 bit còn lại bị loại bỏ. 56 bit thu được được chia làm hai phần bằng nhau,
mỗi phần28 bit được xử lý độc lập. Sau mỗi chu trình, mỗi phần được dịch đi 1
hoặc 2 bit (tùy thuộc từng chu trình). Các khóa con 48 bit được tạo thành bởi thuật
toán lựa chọn 2 (Permuted Choice 2, hay PC-2) gồm 24 bit từ mỗi phần. Quá trình
dịch bit (được ký hiệu là "<<<" trong sơ đồ) khiến cho các khóa con sử dụng các bit
khác nhau của khóa chính; mỗi bit được sử dụng trung bình ở 14 trong tổng số 16
khóa con.
Quá trình tạo khóa con khi thực hiện giải mã cũng diễn ra tương tự nhưng các khóa
con được tạo theo thứ tự ngược lại. Ngoài ra sau mỗi chu trình, khóa sẽ được dịch
phải thay vì dịch trái như khi mã hóa.
DES | 12
Bước 2. Mã hóa khối thông tin 64 bit
Hình: Cấu trúc thuật toán Feistel
Có 16 chu trình giống nhau trong quá trình xử lý. Ngoài ra còn có hai lần hoán vị
đầu và cuối (Initial and final permutation - IP&FP). Hai quá trình này có tính chất
đối nhau (trong quá trình mã hóa thì IP trước FP, khi giải mã thì ngược lại). IP và
FP không có vai trò xét về mật mã học và việc sử dụng chúng chỉ có ý nghĩa đáp
ứng cho quá trình đưa thông tin vào và lấy thông tin ra từ các khối phần cứng có từ
thập niên 1970.
Trước khi đi vào 16 chu trình chính, khối thông tin 64 bit được tách làm hai phần 32
bit và mỗi phần sẽ được xử lý tuần tự (quá trình này còn được gọi là mạng Feistel).
DES | 13
Cấu trúc của thuật toán (mạng Feistel) đảm bảo rằng quá trình mã hóa và giải mã
diễn ra tương tự. Điểm khác nhau chỉ ở chỗ các khóa con được sử dụng theo trình tự
ngược nhau. Điều này giúp cho việc thực hiện thuật toán trở nên đơn giản, đặc biệt
là khi thực hiện bằng phần cứng.
Hàm F (Feistel)
Hàm F làm biến đổi một nửa của khối đang xử lý với một khóa con. Đầu ra sau hàm
F được kết hợp với nửa còn lại của khối và hai phần được tráo đổi để xử lý trong
chu trình kế tiếp. Sau chu trình cuối cùng thì 2 nửa không bị tráo đổi; đây là đặc
điểm của cấu trúc Feistel khiến cho quá trình mã hóa và giải mã trở nên giống nhau.
Hình: Hàm F
Hàm F hoạt động trên khối 32 bit, bao gồm 4 giai đoạn:
1. Mở rộng: 32 bit đầu vào được mở rộng thành 48 bit sử dụng thuật toán hoán vị
mở rộng (expansion permutation) với việc nhân đôi một số bit. Giai đoạn này được
ký hiệu là E trong sơ đồ.
2. Trộn khóa: 48 bit thu được sau quá trình mở rộng được XOR với khóa con.
3.Thay thế: 48 bit sau khi trộn được chia làm 8 khối con 6 bit và được xử lý qua hộp
thay thế S-box. Đầu ra của mỗi khối 6 bit là một khối 4 bit theo một chuyển đổi phi
tuyến được thực hiện bẳng một bảng tra. Khối S-box đảm bảo phần quan trọng cho
DES | 14
độ an toàn của DES. Nếu không có S-box thì quá trình sẽ là tuyến tính và việc thám
mã sẽ rất đơn giản.
4.Hoán vị: Cuối cùng, 32 bit thu được sau S-box sẽ được sắp xếp lại theo một thứ
tự cho trước (còn gọi là P-box).
Quá trình luân phiên sử dụng S-box và sự hoán vị các bít cũng như quá trình mở
rộng đã thực hiện được tính chất gọi là sự xáo trộn và khuyếch tán (confusion and
diffusion). Đây là yêu cầu cần có của một thuật toán mã hoá được Claude Shannon
phát hiện trong những năm 1940.
DES | 15
IV. VÍ DỤ
Xét chuỗi cần mã hóa M = 0123456789ABCDEF (hệ Hexa). Ta chuyển M
về dạng nhị phân sẽ thu được một khối 64bit.
M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101
1110 1111
Chia M làm 2 khối:
L = 0000 0001 0010 0011 0100 0101 0110 0111
R = 1000 1001 1010 1011 1100 1101 1110 1111
DES hoạt động trên các khối 64 bit sử dụng một khóa có kích thước 56bit. Tuy
nhiên khóa thực sự được lưu trữ với chiều dài 64 bit và có 8 bit không được sử dụng
(8,16,24,32,40,48,56,64). Tuy nhiên ta sẽ xem xét 8 bit này khi tạo ra các khóa
con(subkeys). Ở đây ta sẽ sử dụng một khóa K = “133457799BBCDFF1” biểu diễn
trong hệ Hexa, lúc này ta sẽ chuyển khóa K này về dạng nhị phân:
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111
11110001
Sau khi đã chuẩn bị xong khóa và dữ liệu ta tiến hành mã hóa theo các bước sau:
Bước 1. Tạo ra 16 khóa con có chiều dài 48bit
Khóa 64 bit sẽ được hoán đổi vị trí theo bảng PC-1. Ta có thể thấy phần tử đầu tiên
của bảng là 57 điều đó có nghĩa là bit thứ 57 của khóa K sẽ trở thành bit đầu tiên để
trở thành khóa K+. Bit thứ 49 trong khóa ban đầu sẽ trở thành bit thứ hai. Cuối
cùng bit thứ 4 trong khóa K sẽ trở thành bit cuối cùng sau khi hoán vị. Ở đây chỉ có
56 bit trong khóa k thực hiện việc hoán vị.
PC-1
5
7
4
9
4
1
3
3
2
5
1
7
9
1 5
8
5
0
4
2
3
4
2
6
1
8
1
0
2 5
9
5
1
4
3
3
5
2
7
1
9
1
1
3 6
0
5
2
4
4
3
6
6
3
5
5
4
7
3
9
3
1
2
3
1
5
7 6
2
5
4
4
6
3
8
3
0
2
2
1
4
6 6
1
5
3
4
5
3
7
2
9
2
1
1
3
5 2
8
2
0
1
2
4
DES | 16
Khóa K 64bit ban đầu:
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111
11110001
Sau khi thực hiện biến đổi ta sẽ thu được một khóa 56 bit:
K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
Tiếp đó ta chia khóa 56 bít này thành hai nửa, C
0
và D
0
có số bit bằng nhau là 28
bit.
C
0
= 1111000011001100101010101111
D
0
= 0101010101100110011110001111
Từ C
0
và D
0
ở trên ta sẽ tạo ra 16 khối C
n
và D
n
(i<=n<=16). Mỗi cặp C
n
và D
n
được tạo ra từ cặp C
n-1
và D
n-1
(n=1,2,…,16) bằng cách dịch bit của khối trước nó
sang trái theo bảng “left shifts”. Để dịch bit ta chuyển các bit sang trái và thêm bit 1
vào đầu dãy bit (tính từ phải sang trái), lặp lại cho đến hết.
I
n
t
e
r
a
t
i
o
n
N
u
m
b
e
r
N
u
m
b
e
r
o
f
L
e
f
t
S
h
i
f
t
s
1 1
2 1
3 2
4 2
5 2
6 2
DES | 17
7 2
8 2
9 1
1
0
2
1
1
2
1
2
2
1
3
2
1
4
2
1
5
2
1
6
1
Điều đó có nghĩa là ta có thể tạo ra C
4
và D
4
từ C
3
và D
3
bằng cách dịch bit của C
3
và D
3
sang trái 2 bít, tương tự các trường hợp còn lại.
C
0
= 1111000011001100101010101111
D
0
= 0101010101100110011110001111
C
1
= 1110000110011001010101011111
D
1
= 1010101011001100111100011110
C
2
= 1100001100110010101010111111
D
2
= 0101010110011001111000111101
C
3
= 0000110011001010101011111111
D
3
= 0101011001100111100011110101
C
4
= 0011001100101010101111111100
D
4
= 0101100110011110001111010101
C
5
= 1100110010101010111111110000
D
5
= 0110011001111000111101010101
C
6
= 0011001010101011111111000011
D
6
= 1001100111100011110101010101
DES | 18
C
7
= 1100101010101111111100001100
D
7
= 0110011110001111010101010110
C
8
= 0010101010111111110000110011
D
8
= 1001111000111101010101011001
C
9
= 0101010101111111100001100110
D
9
= 0011110001111010101010110011
C
10
= 0101010111111110000110011001
D
10
= 1111000111101010101011001100
C
11
= 0101011111111000011001100101
D
11
= 1100011110101010101100110011
C
12
= 0101111111100001100110010101
D
12
= 0001111010101010110011001111
C
13
= 0111111110000110011001010101
D
13
= 0111101010101011001100111100
C
14
= 1111111000011001100101010101
D
14
= 1110101010101100110011110001
C
15
= 1111100001100110010101010111
D
15
= 1010101010110011001111000111
C
16
= 1111000011001100101010101111
D
16
= 0101010101100110011110001111
Bây giờ chúng ta sẽ tạo ra những khóa con K
n
(1<=n<=16) từ những cặp C
n
và D
n
sau khi biến đổi qua bảng PC-2. Những khóa K
n
sau khi tạo ra chỉ có chiều dài là
48 bit.
PC-2
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
DES | 19
46 42 50 36 29 32
Ta có thể thấy rằng sau khi qua bảng biến đổi PC-2 thì bit thứ 14 của C
n
D
n
sẽ là bit
đâu tiên của K
n
.v.v…
Với khóa đầu tiên ta có
C
1
D
1
= 11100001100110010101010111111010101011001100111100011110
=>K
1
= 000110 110000 001011 101111 111111 000111 000001 110010
Tương tự ta có:
K
2
= 011110 011010 111011 011001 110110 111100 100111 100101
K
3
= 010101 011111 110010 001010 010000 101100 111110 011001
K
4
= 011100 101010 110111 010110 110110 110011 010100 011101
K
5
= 011111 001110 110000 000111 111010 110101 001110 101000
K
6
= 011000 111010 010100 111110 010100 000111 101100 101111
K
7
= 111011 001000 010010 110111 111101 100001 100010 111100
K
8
= 111101 111000 101000 111010 110000 010011 101111 111011
K
9
= 111000 001101 101111 101011 111011 011110 011110 000001
K
10
= 101100 011111 001101 000111 101110 100100 011001 001111
K
11
= 001000 010101 111111 010011 110111 101101 001110 000110
K
12
= 011101 010111 000111 110101 100101 000110 011111 101001
K
13
= 100101 111100 010111 010001 111110 101011 101001 000001
K
14
= 010111 110100 001110 110111 111100 101110 011100 111010
K
15
= 101111 111001 000110 001101 001111 010011 111100 001010
K
16
= 110010 110011 110110 001011 000011 100001 011111 110101
Kết thúc bước một ta đã thu được 16 khóa con.
Bước 2. Mã hóa khối thông tin 64 bit
Ta tìm hoán vị IP(Initial Permutation) cho chuỗi M 64 bit cần mã hóa. Bit thứ 58
của M trở thành bit đầu tiên của IP, bit 50 trở thành bit thứ hai của IP và bit cuối
cùng của IP là bit thứ 7 của M.
IP
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
DES | 20
Thực hiện hoán vị trên, ta được:
M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101
1110 1111
IP = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000
1010 1010
Ta thấy bit thứ 58 của M là bit “1” trở thành bit đầu tiên của IP. Bit thứ 50 của M là
bit “1” trở thành bit thứ hai của IP và bit thứ 7 của M là bit “0” trở thành bit cuối
cùng của IP.
Kế đến, khối thông tin IP được tách làm 2 phần 32 bit, 32 bit trái L
0
và 32 bit
phảiR
0
:
L
0
= 1100 1100 0000 0000 1100 1100 1111 1111
R
0
= 1111 0000 1010 1010 1111 0000 1010 1010
Chu trình sau được lặp lại 16 lần (1 n 16), mỗi khối 32 bit sẽ được xử lí tuần tự
thông qua hàm F. Ta có công thức sau (dấu + thể hiện phép toán XOR):
L
n
= R
n
-1
R
n
= L
n
-1 + f (R
n-1
, K
n
)
L
16
R
16
là khối cuối cùng (n = 16). Ở mỗi vòng lặp, ta lấy 32 bit phải của kết quả
trước gán cho 32 bit trái của bước hiện tại. 32 bit phải của bước hiện tại được tính
bằng cách lấy 32 bit trái của bước trước XOR với hàm F.
Với n = 1 ta có:
K
1
= 000110 110000 001011 101111 111111 000111 000001 110010
L
1
= R
0
= 1111 0000 1010 1010 1111 0000 1010 1010
R
1
= L
0
+ F (R
0
, K
1
)
Hàm F được tính như sau:
Mở rộng : đầu tiên mở rộng khối R
n-1
từ 32 bit thành 48 bit bằng cách sử dụng bảng
chọn E để lặp lại một số bit trong R
n-1
. Đầu vào của E(R
n-1
) là một khối 32 bit và
đầu ra là khối 48 bit.
Đầu ra của E là 48 bit, được viết thành 8 khối, mỗi khối 6 bit bằng cách chọn một
số bit từ đầu vào theo bảng bên dưới:
E BIT-SELECTION TABLE
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
DES | 21
Tính E(R
0
) từ R
0
R
0
= 1111 0000 1010 1010 1111 0000 1010 1010
E(R
0
) = 011110 100001 010101 010101 011110 100001 010101 010101
Bit thứ 32 của R
0
được lặp lại 2 lần trong E(R
0
) ở vị trí thứ nhất và vị trí thứ 63.
Ta thấy với mỗi khối 4 bit ban đầu trong R0 đã được mở rộng thành khối 6 bit trong
E(R
0
).
Trộn khóa: bước kế trong việc tính F là thức hiện phép XOR E(R
n-1
) với khóa K
n
:
K
n
+ E(R
n-1
)
Đối với khóa K
1
và E(R
0
) ta có:
K
1
= 000110 110000 001011 101111 111111 000111 000001 110010
E(R
0
) = 011110 100001 010101 010101 011110 100001 010101 010101
K
1
+E(R
0
) = 011000 010001 011110 111010 100001 100110 010100 100111
Thay thế: 48 bit sau khi trộn khóa được chia làm 8 khối con 6 bit và được xử lý qua
hộp thay thế S-box. Mỗi nhóm 6 bit cho một địa chỉ khác nhau trong S-box, dựa
vào địa chỉ này để thay thế các nhóm 6 bit thành các nhóm 4 bit tương ứng.
Kết quả ở bước trước được viết lại theo nhóm 6 bit:
K
n
+ E(R
n-1
) =B
1
B
2
B
3
B
4
B
5
B
6
B
7
B
8
Tính:
S
1
(B
1
)S
2
(B
2
)S
3
(B
3
)S
4
(B
4
)S
5
(B
5
)S
6
(B
6
)S
7
(B
7
)S
8
(B
8
)
Dựa vào hàm S1, S2, , S8 để thay thế các khối 6 bit bằng khối 4 bit.
Sau đây là bảng S1.
j
i
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
Cách tính S
1
(B):
- Xác đinh hàng i: lấy bit đầu tiên và bit cuối cùng của B ghép lại được một số trong
hệ nhị phân có giá trị từ 00 đến 11, đổi số này sang hệ thập phân (giá trị từ 0 đến 3)
ta xác định được hàng i trong bảng S1.
- Xác định cột j: lấy 4 bit ở giữa của B đổi sang hệ thập phân (có giá trị từ 0 đến 15,
giá trị nhị phân là 0000 đến 1111) ta xác định được cột j trong bảng S1.
- từ i và j vừa tìm được, tìm trong bảng S1 được giá trị ở hệ thập phân, đổi giá trị
này sang hệ nhị phân, giá trị nhị phân này chính là kết quả của việc tính S1(B).
Ví dụ:
B = 011011
DES | 22
Bit đầu tiên là 0, bit cuối cùng là 1, ghép lại thành 01, đổi sang thập phân được 1,
vậy 1 là hàng trong bảng S1.
4 bit ở giữa là 1101, đổi sang thập phân là 13, vậy 13 là thứ tự cột trong bảng S1.
Tìm trong bảng S1 hàng 1, cột 13 được giá trị 5, đổi sang nhị phân được 0101. 0101
là kết quả của việc tính S1(B)
Vậy S
1
(011011) = 0101.
Bảng S1, S2… S8 được chỉ ra sau đây:
S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
DES | 23
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
Ở vòng lặp đầu tiên ta được kết quả như sau:
K
1
+ E(R
0
) = 011000 010001 011110 111010 100001 100110 010100 100111.
S
1
(B
1
)S
2
(B
2
)S
3
(B
3
)S
4
(B
4
)S
5
(B
5
)S
6
(B
6
)S
7
(B
7
)S
8
(B
8
) = 0101 1100 1000 0010 1011
0101 1001 0111
Hoán vị: 32 bit thu được sau S-box sẽ được sắp xếp lại theo một thứ tự cho trước
(còn gọi là P-box).
f = P(S
1
(B
1
)S
2
(B
2
) S
8
(B
8
))
P
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
DES | 24
Ví dụ:
Kết quả sau S-box là:
S
1
(B
1
)S
2
(B
2
)S
3
(B
3
)S
4
(B
4
)S
5
(B
5
)S
6
(B
6
)S
7
(B
7
)S
8
(B
8
) = 0101 1100 1000 0010 1011
0101 1001 0111
Chúng ta có f là:
f = 0010 0011 0100 1010 1010 1001 1011 1011
R
1
= L
0
+ f(R
0
, K
1
)
= 1100 1100 0000 0000 1100 1100 1111 1111
+ 0010 0011 0100 1010 1010 1001 1011 1011
= 1110 1111 0100 1010 0110 0101 0100 0100
Trong vòng lặp kế tiếp, chúng ta có L
2
= R
1
, kế đến ta tính R
2
=L
1
+ f(R
1
, K
2
) và tiếp
tục đến hết 16 vòng lặp.
Kết thúc vòng lặp thứ 16 ta được L
16
và R
16
. Kế đến ta đảo ngược 2 khối thành khối
64 bit
R
16
L
16
và tính theo bảng IP
-1
bên dưới:
IP
-1
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
Ví dụ:
Sau 16 vòng lặp, ta tính được:
L
16
= 0100 0011 0100 0010 0011 0010 0011 0100
R
16
= 0000 1010 0100 1100 1101 1001 1001 0101
đảo ngược L
16
và R
16
và sắp xếp lại theo bảng IP
-1
R
16
L
16
= 00001010 01001100 11011001 10010101 01000011 01000010 00110010
00110100
IP
-1
= 10000101 11101000 00010011 01010100 00001111 00001010 10110100
00000101
Chuyển IP
-1
sang hệ thập lục phân được: 85E813540F0AB405.
Kết quả cuối cùng ta được:
M = 0123456789ABCDEF
C = 85E813540F0AB405
DES | 25