개념
* 스트림 암호
사용처
* TLS/SSL
* WEP
원리
1. 키스트림이 만들어지기 위한 재료로 임의의 배열 선언
2. 배열 안에 각 인덱스를 값으로 넣음
3. 키 값을 통해 배열의 값을 섞음
4. 정해진 규칙으로 배열을 이용해 키스트림 생성
5. XOR로 암호문 생성
코드
INPUT: key, plaintext
1. KSA(Key Scheduling Algorithm)
S = [i for i in range(0,256)]
J = 0
for i in range(0, 256):
J = (J + S[i] + key[i % len(key)]) % 256
S[i], S[j] = S[j], S[i]
2.PRGA(Pseudo-Random Generation Algorithm) and XOR
i = 0; j = 0;
K=list() #keystream
C =list() #ciphertext
for n in plaintext:
i = (i+1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
ks = S[(S[i] + S[j]) % 256] # 키스트림 1바이트 생성
K.append(ks) # 키스트림 저장
C.append(n ^ ks) # xor로 암호문 생성
참고
https://en.wikipedia.org/wiki/RC4
https://g0pher.tistory.com/356
https://github.com/jbremer/rc4/blob/master/rc4/__init__.py