فایل دانلود

advertisement
‫رمزهای دنباله ای‬
stream cipher
RC4
‫الگوریتم ‪RC4‬‬
‫‪‬‬
‫یک رمزکننده ی دنباله ای است که درسال ‪ 1987‬توسط ران ری وست طراحی شد‬
‫‪ ‬رمزکننده بلوکی در هر زمان یک بلوک از ورودی را پردازش می کند و برای هربلوک ورودی یک بلوک‬
‫خروجی تولید می کند ولی رمز کننده ی دنباله ای عناصر ورودی را به طور پیوسته پردازش کرده و‬
‫هربار یک عنصر خروجی تولید می کند‪.‬‬
‫‪‬‬
‫رمزکننده ی دنباله با کلیدی با طول متغیر است که عملیات آن بایت گرا می باشد‬
‫‪‬‬
‫این الگوریتم از جایگشت تصادفی استفاده می کند‬
‫‪LOGO‬‬
‫رمزکننده ی دنباله‬
‫‪‬رمزکننده ی دنباله هر بار یک بایت یا واحد های بزرگتر از یک متن ساده را رمز گذاری می کند‪.‬‬
‫‪‬دنباله کلید به صورت دنباله ای از بایت هاست‪.‬‬
‫‪‬امتیاز عمده ی رمز کننده ی دنباله ای نست به رمز کننده های بلوکی این است که این رمزکننده سریعتر عمل نموده و‬
‫نسبت به رمز کننده های بلوکی از کدهای کمتری استفاده می نماید‪.‬‬
‫‪‬رمزکننده های بلوکی چون از کلیدهای یک بارمصرف استفاده می نماید احتمال تکراری بودن کلید بیشتر بوده در حالیکه‬
‫رمزکننده ی بلوکی از جایگشت های مختلف این کلید میتواند استفاده کند‪.‬‬
‫‪LOGO‬‬
‫ساختار رمزکننده ی دنباله‬
‫کلید‬
‫‪K‬‬
‫کلید‬
‫‪K‬‬
‫مولدبایت شبه تصادفی‬
‫(مولد دنباله کلید)‬
‫دنباله بایت‬
‫متن ساده‬
‫‪M‬‬
‫دنباله بایت‬
‫متن رمزشده‬
‫‪C‬‬
‫رمزگشایی‬
‫‪LOGO‬‬
‫مولدبایت شبه تصادفی‬
‫(مولد دنباله کلید)‬
‫دنباله بایت‬
‫متن رمزشده‬
‫دنباله کلید‬
‫‪C‬‬
‫رمزگذاری‬
‫دنباله بایت‬
‫متن ساده‬
‫‪M‬‬
Stream Ciphers – General Concept
state (data)
‫مولدبایت شبه تصادفی‬
)‫(مولد دنباله کلید‬
key
next state
function
output
output
function
function
ksi
pi (ci)
ci (pi)
LOGO
RC4
S-Box Creation
input key;
if (key < 256 bytes) {
repeat key until 256 bytes;
}
for (i=0; i < 256; ++i) {
S[i] = i; // initialize S-Box
K[i] = ith key byte;
}
j = 0;
for (i = 0; i <256; ++i) {
j = (j + S[i] + K[i]) mod 256;
swap(S[i],S[j]);
}
Keystream Generator
i = 0; j = 0;
loop {
i = (i+1) mod 256;
j = (j+S[i]) mod 256;
Swap(S[i],S[j]);
t = (S[i] + S[j]) mod 256;
ks_byte = S[t];
}
2 S-Box entries form index into S-Box
Output S-Box entry (byte)
S-Box: key dependent
permutation of 0 to 255.
(lookup table)
LOGO
LOGO
‫مثال‬
‫] ‪K=[ 1 2 3 6‬‬
‫کلید‬
‫‪K‬‬
‫] ‪ S=[ 0 1 2 3 4 5 6 7‬بردارحالت‬
‫می خواهیم جایگشتی از تمام اعداد‪ 8‬بیتی تولید کنیم وبایت‬
‫‪ k‬را از ‪ s‬تولید کنیم و با تولید هرمقدار‪ k‬وارده‬
‫های ‪ s‬یکباردیگر جایگشت می شوند‬
‫مولدبایت شبه تصادفی‬
‫(مولد دنباله کلید)‬
‫] ‪ T= [1 2 3 6 1 2 3 6‬بردار موقت‬
‫دنباله بایت‬
‫متن رمزشده‬
‫?=‪c‬‬
‫‪C‬‬
‫?=‪ k‬دنباله کلید‬
‫دنباله بایت‬
‫متن ساده‬
‫‪p‬‬
‫] ‪P= [ 1 2 2 2‬‬
‫‪LOGO‬‬
Assume we use a 4 x 3-bit key, K, and plaintext P as below:
‫مفروضات‬
K = [1 2 3 6]
P = [1 2 2 2]
The first step is to generate the stream
.
Initialise the tate vector S and temporary vector T. S is initialised so the S[i] = i,
and T is initialised so it is the key K (repeated as necessary).
S = [0 1 2 3 4 5 6 7]
T = [1 2 3 6 1 2 3 6]
Now perform the initial permutation on S.
j = 0;
for i = 0 to 7 do
j = (j + S[i] + T[i]) mod 8
Swap(S[i],S[j]);
end
;
‫آماده سازی‬
s ‫بردار‬
LOGO
We will step through for each iteration of i:
S = [0 1 2 3 4 5 6 7]
T = [1 2 3 6 1 2 3 6]
For i = 0:
j = (0 + 0 + 1) mod 8
j= 1
Swap(S[0],S[1]);
So in the 1st iteration S[0] must be swapped with S[1] giving:
S = [1 0 2 3 4 5 6 7]
j = 0;
for i = 0 to 7 do
j = (j + S[i] + T[i]) mod 8
Swap(S[i],S[j]);
end
The results of the remaining 7 iterations are:
For i = 1:
j=(1+0+2) mod 8=3
j=3
Swap(S[1],S[3])
S = [1 3 2 0 4 5 6 7];
For i = 2:
J=(3+2+3) mod 8=0
j=0
Swap(S[2],S[0]);
S = [2 3 1 0 4 5 6 7]
For i = 3:
j =(0+0+ 6)=6;
Swap(S[3],S[6])
S = [2 3 1 6 4 5 0 7];
LOGO
For i = 4:
j=3
Swap(S[4],S[3])
S = [2 3 1 4 6 5 0 7];
j = 0;
for i = 0 to 7 do
j = (j + S[i] + T[i]) mod 8
Swap(S[i],S[j]);
end
For i = 5:
j=2
Swap(S[5],S[2]);
S = [2 3 5 4 6 1 0 7];
For i = 6:
j = 5;
Swap(S[6],S[5])
S = [2 3 5 4 6 0 1 7];
For i = 7:
j = 2;
Swap(S[7],S[2])
S = [2 3 7 4 6 0 1 5];
Hence, our initial permutation of S gives:
S= [2 3 7 4 6 0 1 5]
،‫ تنها اثر‬،‫ جابجایی است‬s ‫چون تنها عملیات روی‬
‫ هنوز حاوی تمام اعداد از صفر‬S ‫ و‬.‫جایگشت می باشد‬
‫ می باشد‬255‫تا‬
LOGO
‫‪Now we generate 3-bits at a time, k, that we XOR with each 3-bits of plaintext to produce the‬‬
‫‪ciphertext. The 3-bits k is generated by:‬‬
‫تولید دنباله‬
‫;‪i, j = 0‬‬
‫{ )‪while (true‬‬
‫;‪i = (i + 1) mod 8‬‬
‫;‪j = (j + S[i]) mod 8‬‬
‫;)]‪Swap (S[i], S[j‬‬
‫;‪t = (S[i] + S[j]) mod 8‬‬
‫;]‪k = S[t‬‬
‫}‬
‫‪‬وقتی بردار آماده شد کلید ورودی دیگر مورد استفاده قرار نمی گیرد‬
‫‪ ‬تولید دنباله شامل مرور تمام عناصر ]‪ s[i‬است به طوریکه هر ]‪ s[i‬با بایت دیگری در ‪ s‬جابجا می شود که طرح آن توسط‬
‫پیکربندی فعلی ‪ s‬تعیین می گردد‪ .‬پس از رسیدن به ]‪ s[255‬این فرایند دوباره از ]‪ s[0‬ادامه می یابد‪.‬‬
‫‪‬برای رمزگذاری مقدار ‪ k‬را با بایت بعدی متن ساده ‪ XOR‬می کنیم و برای رمزگشایی مقدار‪K‬را با بایت بعدی متن رمز شده ‪XOR‬‬
‫می کنیم‬
‫‪LOGO‬‬
The first iteration:
S = [2 3 7 4 6 0 1 5]
i = (0 + 1) mod 8 = 1
j = (0 + S[1]) mod 8 = 3
Swap(S[1],S[3])
S = [2 4 7 3 6 0 1 5]
t = (S[1] + S[3]) mod 8 = 7
k = S[7] = 5
Remember, that P is:
P = [1 2 2 2]
So our rst 3-bits of ciphertext is obtained by: k XOR P1
5 XOR 1 = 101 XOR 001 = 100 = 4
C=[4 - - - ]
S = [2 4 7 3 6 0 1 5]
i = (1 + 1 ) mod 8 = 2
j = (3 + S[2]) mod 8 = 2
Swap(S[2],S[2])
S = [2 4 7 3 6 0 1 5]
t = (S[2] + S[2]) mod 8 = 6
k = S[6] = 6
Second 3-bits of ciphertext are:
6 XOR 2 = 110 XOR 010 = 100 = 4
C=[4 4 - - ]
The third iteration:
S = [2 4 7 3 6 0 1 5]
i = (2 + 1) mod 8 = 3
j = (2 + S[3]) mod 8 = 5
Swap(S[3],S[5])
S = [2 4 7 0 6 3 1 5]
t = (S[3] + S[5]) mod 8 = 3
k = S[3] = 0
Third 3-bits of ciphertext are:
0 XOR 2 = 000 XOR 010 = 010 = 2
C=[4 4 2 - ]
The final iteration:
S = [2 4 7 0 6 3 1 5]
i = (1 + 3 ) mod 8 = 4
j = (5 + S[4]) mod 8 = 3
Swap(S[4],S[3])
S = [2 4 7 6 0 3 1 5]
t = (S[4] + S[3]) mod 8 = 6
k = S[6] = 1
Last 3-bits of ciphertext are:
1 XOR 2 = 001 XOR 010 = 011 = 3
i, j = 0;
while (true) {
i = (i + 1) mod 8;
j = (j + S[i]) mod 8;
Swap (S[i], S[j]);
t = (S[i] + S[j]) mod 8;
k = S[t];
}
C=[4 4 2 3 ]
LOGO
So to encrypt the plaintext stream P with key K with our simplied RC4 stream we
get C:
P = [1 2 2 2]
K = [1 2 3 6]
C = [4 4 2 3]
Or in binary:
P = 001010010010
K = 001010011110
C = 100100010011
LOGO
LOGO
Download