① 암호화할 메시지와 초기화 벡터를 입력 받음
char S[256];
char K[256];
char key[] = "key";
char plainText[] = "killhitler";
vector<char> KeyStream(strlen(plainText));
② 초기화 벡터와 암호화 키를 사용하여 RC4 내부 상태 초기화
int i=0;
// S[i], K[i] 초기화
for (i = 0; i < 256; i++) {
S[i] = i;
K[i] = key[i % strlen(key)];
}
int j=0;
// S[i]를 뒤섞어줌
for (i = 0; i < 256; i++) {
j = (j + S[i] + K[i]) % 256;
swap(S[i], S[j]);
}
i=j=0;
③ 암호화
// Encryption
for (int k = 0; k < strlen(plainText); k++) {
i = (i + 1) % 256;
j = (j + S[i]) % 256;
swap(S[i], S[j]);
t = (S[i] + S[j]) % 256;
KeyStream[k] = S[t];
plainText[k] ^= S[KeyStream[k]];
}
④ 복호화 :
//복호화 과정
for (int k = 0; k < strlen(plainText); k++) {
plainText[k] ^= S[KeyStream[k]];
}
현재는 stream cipher보다 block cipher을 사용하는 추세.
confusion : 원문의 내용을 알기 어렵게 하는 것
Diffusion : 암호화 알고리즘의 추론을 어렵게 하는 것
대칭키를 입력받아 초기 라운드 키를 생성하고, 평문을 블록으로 나누어 암호화하는 과정입니다. 각 라운드에서는 입력된 블록과 라운드 키를 사용하여 다양한 연산을 수행하고, 최종적으로 암호문을 출력
① 대칭키를 입력받음 (64bit)
② 대칭키로 부터 초기 라운드 키를 생성
③ 평문을 입력받음
④ 평문을 64 bit block으로 분할
⑤ 분할된 block을 재배치
⑥ 16라운드를 거쳐 암호문을 생성
⑦ 암호문 결과(64bit)를 다시 32bit 2개로 나눔
⑧ 재배치
⑨ 암호문 완성
DES 알고리즘을 세 번 연속으로 적용하여 암호화
① 3개의 서로 다른 대칭키를 준비합니다.
② 첫 번째 대칭키로 DES 암호화를 수행합니다.
③ 두 번째 대칭키로 DES 복호화를 수행합니다.
④ 세 번째 대칭키로 DES 암호화를 수행합니다.
C = ( ( (P) )
Why 2-DES?
: MIM 공격에 취약함 (known plaintext attack)
좋은 자료 감사합니다😊