Transcript فایل دانلود
یا هلابند یاهزمر
stream cipher RC4
RC4
متیروگلا
دش یحارط تسو یر نار طسوت 1987 لاسرد هک تسا یا هلابند ی هدننکزمر کی
کولب کی یدورو کولبره یارب و دنک یم شزادرپ ار یدورو زا کولب کی نامز ره رد یکولب هدننکزمر
و هدرک شزادرپ هتسویپ روط هب ار یدورو رصانع یا هلابند ی هدننک زمر یلو دنک یم دیلوت یجورخ
.
دنک یم دیلوت یجورخ رصنع کی رابره دشاب یم ارگ تیاب ن ا تایلمع هک تسا ریغتم لوط اب یدیلک اب هلابند ی هدننکزمر دنک یم هدافتسا یفداصت تشگیاج زا متیروگلا نیا
LOGO
هلابند ی هدننکزمر
.
دنک یم یراذگ زمر ار هداس نتم کی زا رت گرزب یاه دحاو ای تیاب کی راب ره هلابند ی هدننکزمر
.
تساه تیاب زا یا هلابند تروص هب دیلک هلابند
یکولب یاه هدننک زمر هب تبسن و هدومن لمع رتعیرس هدننکزمر نیا هک تسا نیا یکولب یاه هدننک زمر هب تسن یا هلابند ی هدننک زمر ی هدمع زایتما
.
دیامن یم هدافتسا یرتمک یاهدک زا زا یکولب ی هدننکزم ر هکیلاح رد هدوب رتشیب دیلک ندوب یرارکت لامتحا دیامن یم هدافتسا فرصمراب کی یاهدیلک زا نوچ یکولب یاه هدننکزمر
.
دنک هدافتسا دناوتیم دیلک نیا فلتخم یاه تشگیاج LOGO
هلابند ی هدننکزمر راتخاس
دیلک
K
دیلک
K
تیاب هلابند هداس نتم
M
یفداصت هبش تیابدلوم ) دیلک هلابند دلوم ( دیلک هلابند نتم تیاب هلابند هدشزمر C نتم تیاب هلابند هدشزمر C یفداصت هبش تیابدلوم ) دیلک هلابند دلوم ( تیاب هلابند هداس نتم
M
یراذگزمر ی یاشگزمر
LOGO
Stream Ciphers – General Concept key state (data) next state function p
i
(c
i
) ks
i
c
i
(p
i
)
یفداصت هبش تیابدلوم ) دیلک هلابند دلوم ( 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] = i th 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
لاثم
تیاب هلابند هداس نتم
p
P= [ 1 2 2 2 ]
دیلک
K
K=[ 1 2 3 6 ]
یفداصت هبش تیابدلوم ) دیلک هلابند دلوم ( دیلک هلابند
k=?
تلاحرادرب
تیا بو هدراو S=[ 0 1 2 3 4 5 6 7 ] مینک دیلوت k رادقمره یتیب 8 دادعا دیلوت اب دنوش یم مامت و زا مینک تشگیاج یتشگیاج دیلوت s میهاوخ زا ار رگیدرابکی s یم k یاه
تقوم رادرب
T= [1 2 3 6 1 2 3 6 ]
نتم تیاب هلابند هدشزمر C
c=?
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]
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];
j = 0; for i = 0 to 7 do j = (j + S[i] + T[i]) mod 8 Swap(S[i],S[j]); end
LOGO
For i = 4 : j = 3 Swap(S[4],S[3])
S = [2 3 1 4 6 5 0 7];
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]
j = 0; for i = 0 to 7 do j = (j + S[i] + T[i]) mod 8 Swap(S[i],S[j]); end
یم تشگیاج ،رثا اهنت ،تسا ی یاجباج
s
یور تایلمع اهنت نوچ دشاب یم 255 ات رفص زا دادعا مامت یواح زونه
S
و .
دشاب 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 یلعف یدنبرکیپ طسوت ن ا حرط هک دوش یم اجباج s رد یرگید تیاب اب s[i] ره هکیروط هب تسا s[i] رصانع مامت رورم لماش هلابند دیلوت
.
دبای یم همادا s[0] زا هرابود دنیارف نیا s[255] هب ندیسر زا سپ مینک یم XOR هدش زمر نتم یدعب تیاب اب ار K رادقم ی یاشگزمر یارب و مینک یم XOR هداس نتم یدعب تیاب اب ار k رادقم یراذگزمر یارب
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
The final iteration: C=[4 4 2 - ] 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
C=[4 4 2 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];
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