본문 바로가기
  • Trace
암호학

RC4

by seleuchel 2023. 10. 28.

개념

* 스트림 암호

 

사용처

* 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