본문 바로가기
☠️ 보안

[암호화] 양방향(공개키/비대칭키, 비공개키/대칭키), 단방향

by 비타민찌 2022. 11. 14.
728x90

0. 양방향/단방향 알고리즘

- 양방향: 암호화된 암호문을 복호화 할 수 있는 알고리즘. 암호화/복호화 가능.

   (대칭키, 비대칭키)

- 단방향: 암호화는 수행하지만 복호화가 불가능한 알고리즘. 암호화/복호화 불가

   (Hash 방식)

 

1. 양방향 알고리즘

대칭키, 비대칭키

암호화, 복호화시 모두 동일한 키를 사용하고, 비대칭키(공개키)방식은 암호화 복호화에 서로 다른 키를 사용한다. 

 

a. 대칭키(비공개키) 방식:

대칭키(비공개키) 방식 : 암복호화에 서로 동일한 키가 사용되는 암호화 방식. 그래서 키를 비공개한다. 하지만 결정적으로 '키 배송'에 관한 문제가 있다. 어떻게든 송신 측에서는 수신 측에 암호 키를 전달해야만 하고, 이 키가 배송과정에서 탈취되면 아무리 뛰어난 암호화 알고리즘을 사용했더라도 평문이 드러나게 된다. 안전하게 평문을 전달하기 위해 만든 것이 암호문인데, 정작 키는 안전하게 전달할 방법이 없는 것. 키 배송 문제를 해결한 방식이 비대칭형 암호이다.

장점 : 속도가 빠르다.

단점 : 키 배송 위험성 존재하여 송신 측에서 수신측에 암호 키를 전달하는 과정에서 노출 우려가 있다. (DES, AES)

 

b. 비대칭키(공개키) 방식:

암복호화에 서로 다른 키가 사용되는 암호화 방식. 하나의 키는 공개키로 사용.

비대칭형 암호는 이름 그대로 암호화 키와 복호화 키가 다르다. 두개의 키를 각각 키A, 키B라고 했을 때 키 A로 암호화한 암호문은 키B로만 복호화 할수 있고, 키 B로 암호화한 암호문은 키A로만 복호화 할수 있다. 따라서 이중 하나의 키만 비밀로 보호하고(이를 '비밀키', '개인키'라고 한다) 다른 하나의 키는 공개해도 상관 없다(이를 '공개키'라고 부른다). 둘 중 하나의 키는 반드시 공개되어야 통상적인 사용이 가능함으로 공개키 암호라고도 불린다. 공개키로 암호화한 암호문은 어차피 개인키를 가진 사람만이 풀어볼 수 있으므로 상호간에 공개키만 교환하고 상대의 공개키로 암호화를 해서 데이터를 교환하면 상대는 자신의 개인키로 복호화를 한다. 따라서 키 배송 문제는 근본적으로 발생하지 않는다.

 

하지만 비대칭형 암호는 암복호화가 대칭형 암호에 비해 현저하게 느리다는 문제점이 있다. 따라서 현실적으로는 비대칭형 암호를 이용해서 대칭형 암호의 키를 배송하고 실제 암호문은 대칭형 암호를 사용하는 식으로 상호보완적으로 이용하는 것이 일반적이다. 그리고 비대칭형 암호라고 약점이 없는 것은 아니어서 중간자 공격(MITM : Man In The Middle Attack)에는 취약하다. 해커가 중간에서 통신을 가로채어 수신자에게는 송신자인 척하고 송신자에게는 수신자인 척 해서 양쪽의 공개키와 실제 암호화에 사용되는 대칭키를 모두 얻어내는 기법.

 

또한 개인키-공개키 관계를 역이용해서 전자서명에 활용하기도 하는데, 특정한 문서를 개인키로 암호화해서 발송하면 이 문서는 해당 발신자의 공개키로만 복호화가 가능하다. 공개키이므로 아무나 열어볼 수는 있지만 해당 발신자의 공개키로만 열린다는 사실에서 이 문서가 해당 발신자에게서 온 것이라는 사실을 인증할 수 있는 것.

 

장점 : 키 배송의 문제를 근본적으로 차단하여 안전성이 높다.

단점 : 대칭키(비공개키)방식에 비해서 느리다. (RSA)

 

2. 단방향 알고리즘

- 평문을 암호문으로 암호화하는 것은 가능하지만 암호문을 평문으로 복호화하는 것은 불가능한 암호화 기법. 수학적 연산(혹은 알고리즘)에 의해 원본 데이터를 매핑시켜 완전히 다른 암호화된 데이터로 변환시키는 것을 의미한다. 이 변환을 해시라고 하고, 해시에 의해 암호화된 데이터를 다이제스트라고 한다.

[예시]

원본 메시지 123456 을 해시 함수에 돌려서 다이제스트인 fs32a3xzz0 을 생성하고 해당 데이터를 DB 에 저장하는 것이다. 이렇게 저장된 다이제스트는 설령 DB가 털린다 하더라도 fs32a3xzz0 은 단방향으로 해싱 된 문자라 복호화 할 수가 없는 것이다. 또한 의미를 파악할 수도 없다.

 

패스워드는 양방향 암호로 저장하는 것보다 단방향 암호로 저장하는 것이 안전하다. 암호화된 패스워드 목록이 탈취되어도 그를 통해 패스워드를 복원할 수 없고, 패스워드 자체를 검증할 때는 입력받은 값을 암호화해서 암호화한 값 끼리 비교하여 인증처리를 하곤한다. 주로 Hash기법을 사용하며 최소한 SHA-256, 가능하면 SHA-3를 쓰는 것이 좋다. 나머지는 취약점이 발견되었다.

 

기본적으로 동일한 평문은 동일한 암호문으로 암호화된다는 점이 문제지만, 이를 바탕으로 평문을 복원할수는 없다.

 

 

 

참고 : https://st-lab.tistory.com/100, https://javaplant.tistory.com/26

728x90

댓글