
암호를 만드는 알고리즘은 크게 2가지로 나눌 수 있다.
- 단방향 : 평문을 암호화하면 복호화가 불가능한 알고리즘
- 양방향 : 평문을 암호화하고 복호화가 가능한 알고리즘
단방향 암호화
- 단방향 알고리즘은 해싱(hashing)을 통해 암호화한다.
- 암호화가 필요하지만 복호화는 필요하지 않는 경우에 사용된다.
- 해시 알고리즘을 사용했을때 입력값이 동일하면 항상 동일한 해시 값을 반환한다.
데이터 무결성 검증 (비밀번호, 파일 변경 여부)
password의 경우에는 사용자가 입력한 값을 암호화해서 서버에 저장해놓고
이후 사용자가 로그인하면 입력한 pw를 암호화한 값과 이미 암호화된 값을 비교하여 비교한다.
ex) MD5, SHA-1, SHA-256, SHA-512
MD5, SHA-1은 충돌(다른 입력값으로 같은 해시값을 생성하는 경우)이 있을 수 있는 알고리즘이다.
현대에는 SHA-256, SHA-3, bcrypt, Argon2와 같은 더 안전한 알고리즘을 사용한다.
양방향 암호화
- 대칭키 : 암호화 Key == 복호화 Key
- 비대칭키 : 암호화 Key != 복호화 Key
대칭키
같은 Key로 암호화, 복호화를 진행하기 때문에 외부에 노출이 되면 안된다.
-
비밀키 암호
-
장점 : 비대칭키에 비해 암/복호화가 빠르다.
-
단점 : 대칭키의 가장 큰 약점은 비밀키를 전송하는 과정에서 탈취될 가능성이 있다.
-
Block 방식
문자열 단어 하나씩 블록으로 나누어 암호화
- feistel 구조
- 특정 계산 함수(라운드 함수)의 반복으로 암호화
ex) DES, 3-DES, SEED
- SPN 구조
- 여러 입력을 작게 나누고 대치 및 전치하는 과정을 반복하며 암호화
ex) AES, ARIA
-
Stream 방식
비트 단위로 암호화
- 속도가 빠르고 오류 전파 현상이 없어 오디오/비디오 스트리밍시 사용 됨
ex) RC-4
비대칭키
키 생성시 2개 생기는데 그 중 한개는 public key로써 공개가 되어야하고 다른 한개는 private key로써 공개되면 안된다.
- 공개키 암호
- 장점 : 대칭키처럼 키를 공유하는 과정이 필요없다.
- 단점 : 대칭키에 비해 암/복호화가 느리다
- ex) RSA(소인수분해), DH(이산대수), ECC(타원 곡선 방정식)
비대칭형 알고리즘으로 대칭형 암호키를 전송하고 실제 암호문은 대칭형 암호를 사용하는 식으로 상호보안적으로 사용한다고함