로드맵
Symmetric encryption
Classical substitution ciphers
Crypto analysis
One time pad
DES
Modes of operation
Triple DES
AES
Stream Cipher(RC4)
암호화, 복호화 하는 키가 같다.
통계학 적으로 사람들이 많이 사용하는 알파벳이 있어서
그 순서대로 브루투 포스 기법을 사용한다면 비밀번호는 쉽게 뚫을 수도 있다.
보안 담당자의 실수를 추적해서 암호를 쉽게 푸는 방법이다.
보안 담당자가 암호 알고리즘을 잘못 이해해서 적용시켰다거나,
암호 키를 복잡하게 쓰면 강력한 알고리즘인데 키를 단순한 것으로 적용시켰다거나 하는 취약점을 발견해서 암호를 푼다.
원타임 패스워드 아니다!!
암호화-> 키(OTP)와 메세지를 XOR 연산을 한다.
복호화-> 키(OTP)와 암호를 XOR 연산을 한다.
XOR을 두 번하면 원본이 나온다는 원리를 적용한 것이다.
A XOR A XOR B = B
A XOR B XOR A = B
단점: 키랑 메세지랑 크기가 같아야 XOR연산을 할 수 있다.
block cipher
메세지를 블록으로 자른다.
각 블록을 암호화해서 보낸다. 블록에 부족한 부분은 패딩해서 보낸다.
DES, AES등이 있다.
streaming cipher
키에 종속적인 무한대로 생성되는 비트를 생성해서 메시지랑 XOR해서 보낸다.
RC4 등이 있다.
DES : Data Encryption Standard
이제 안 써요 56비트로 계산이 되기에 브루투포스에 약하다
adopted in 1977 by NBS (now NIST) 표준기구 여기서 만듦
56비트 키를 가지고 매 라운드 마다 사용할 48비트 키를 만들고,
그 키를 사용한 비트를 섞어주는 함수 permute를 통해 여러번 섞어준다.

매세지를 패딩해서 48비트로 늘리고, 48비트 키랑 XOR을 한다.

결론
64비트 메세지를 몇 비트씩 쪼갠다. 56비트 키를 가지고 라운드 별로 조합을 시킨다. 64비트 결과를 만들겠다.
2^56번 브루투포스를 쓰면 뚫린다.
AES(256비트)로 개선시켜서 많이 쓰는 중이다.
DES,AES 둘 다 block cipher!
ECB 방법(블록을 따로 다 암호화 하는 것)을 하면 문제가 생긴다.
같은 블록들을 같은 암호로 암호화를 한다면, 아래 사진과 같이 랜덤성이 보장이 안된다. Confidentiality기밀성이 보장이 안된다.

그래서 CBC모드를 쓴다!
Cipher Block Chaining

암호화를 할 때, 키만 사용하는 것이 아니라, 앞의 블록에서 암호화된 내용도 사용한다. (체이닝)
Modes of operation
동일한 메세지를 매일 보내야하는 경우
보내는 메세지가 같으면 암호화된 내용도 매번 같아진다.
그래서 암호화 시키는 키 값을 매번 바꿔줘야하는 문제가 생긴다.
Initialization Vector (IV)공개값,누가 봐도 됨Modes of operation
따라서 키와 같은 길이의 랜덤 넘버를 생성해서 암호화하는데 사용한다.

DESx3 을 한 triple des 라는 것도 있는데 112비트도 너무 짧고 약해서 안쓴다.
AES를 쓸 때, 256비트가 되지 않는다면 padding을 한다.
패딩하는 디팩토(업계 표준)은 PKCS#5이다.
If numberOfBytes(clearText) mod 8 == 7, PM = M + 0x01 (1바이트 부족)
If numberOfBytes(clearText) mod 8 == 6, PM = M + 0x0202 (2바이트 부족)
If numberOfBytes(clearText) mod 8 == 5, PM = M + 0x030303 (3바이트 부족)
암호해야할 데이터가 다 오지 않아도 암호화 할 수 있다.
키 제너레이터가 키를 기준으로 바이트를 생성해서
원본 메시지를 1바이트씩 XOR한다.
블록, 스트리밍 사이퍼
성능 비슷해서
상황에 맞는거 쓰면 된다!