양방향의 대칭키 암호, 비대칭키 암호 그리고 단방향 암호는 모두 암호화 기술의 종류는 나타 낸다.
양방향 알고리즘은 주로 데이터의 기밀성을 보호하는 데 사용된다. 암호화된 데이터를 해당 키를 가진 사람만이 복호화 할수 있기 때문에, 데이터를 안전하게 전송하고 저장, 관리할 수 있기 떄문이다.
반면 단방향 암호화 기술은 데이터의 무겨렁을 검증하는 데 사용된다. 복호화가 불가능한 암호화이기 때문이다.
예를 들어 비밀번호를 단방향으로 암호화 저장하면 복호화 하지 안혹도 입력한 비밀번호와 저장된 비밀번호를 암호화 한 상태로 비교하며 데이터의 변경 여부를 확인할 수 있다.
대칭키
대칭키는 암복호화키가 동일하며 해당 키를 하는 사람만이 문서를 복호화해 볼수있게 된다.
공개키 암호화 방식에 비해 속도가 빠르다는 장점이 있지만, 키를 교환해야한다는 문제 (키 배송 문제)가 발생한다. 키를 교환하는 중 키가 탈취될 수 있는 문제도 있고 사람이 증가할수록 전부 따로따로 키교환을 해야하기 떄문에 관리해야 할 키가 방대하게 많아진다.
이러한 키 배송 문제를 해결하기 위한 방법으로 키의 사전 공유에 의한 해결, 키 배포센터의 의한 해결, Diffie-Hellman키 교환에 의한 해결, 공개키 암호에 의한 해결이 있다.
동작 과정 (단방향)
1. 나에게 암호움을 전달하고 싶은 대상에게 공개키를 전달한다. (공개키는 바로 네트워크를 통해 전달해도 된다.)
2. 공개키를 받은 사람은 공개키를 사용하여 암호화하고 나에게 암호문을 보낸다. 이제 암호문을 복호화 할 수 있는 건 비밀키를 가진 '나' 뿐이다.
3. 나는 암호문을 받아 비밀키로 복호화 한다.
위 동작 과정에서 '나'는 오직 암호문을 복호화할뿐이다. 나도 암호문을 보내고 싶다면 A와 B가 서로 암호문을 주고 받는 동작 과정은 아래와 같다.
동작 과정 (양방향)
1. A와 B는 각자 개인키와 공개키를 가지고 있다.
2. A는 B에게 자신의 공개키를, B도 A에게 자신의 공개키를 전달한다.
3. 상대방에게 전달받은 공개키로 암호화해 암호문을 보낸다. 즉 A는 B의 공개키로 암호화하고 B는 A의 공개키로 암호화한다. 이제 암호문을 복호화 할 수 있는건 비밀키를 가진 '상대방' 뿐이다.
4. 암호문을 받으면 자신의 비밀키로 복호화 한다.
공개키 암호화 방식
공개키 암호화 방시은 대칭키 암호화 방식의 키 배송 문제를 극복하기 위해 등장했다. 공개키 암호화 방식은 암호화와 복호화에 사용되는 키가 다른 암호화 방식을 말하며 서로 다른 두개의 키인 공개키(Public Key)와 개인키(Private Key)를 사용한다.
공개키로 암호화한 암호문은 오직 개인키로만 복호화 할 수 있다. 대표적인 알고리즘은 RSA, DSA, ECC등이 있다.
비대칭키
비대칭키 암호화는 암호화와 복호화에 서로 다른 키를 사용하기 때문에, 인증과 암호화를 동시에 수행 할 수 있다. 즉, 암호화된 데이터를 복호화할 때는 암호화할 때 사용한 키와 다른 별도의 복호화용 키를 사용한다.
이는 대치킹 암호화 방식과 달리 안전한 키 교환을 위해 사용된다. 즉, 두 사용자가 키를 공유하지 않고도 안전하게 암호화된 메세지를 전송할 수 있다. 이러한 방식은 보안성이 높은 대신, 대치킹 암호화에 비해 처리 속도가 느리고, 키의 관리와 분배가 복잡하다.
비대칭키 (동작 과정)
1. A와 B는 각자 개인키와 공개키를 가지고 있다.
2. A는 B에게 자신의 공개키를, B도 A에게 자신의 공개키를 전달한다.
3. 상대방에게 전달받은 공개키를 암호화해 암호문을 보낸다. 즉 A는 B의 공개키로 암호화하고 B는 A의 공개키로 암호화한다. 이제 암호문을 복호화 할 수 있는건 비밀키를 가진 '상대방' 뿐이다.
4. 암호문을 받으면 자신의 비밀키로 복호화 한다.
Public Key(공개키)
공개 키는 암호화 하면 Data보안에 중점을 둔다. 상대방이 송신한 Public key로 data를 암호화 하고 전송 한다. 즉, data를 수신한 사람은 자신의 pricate Key로 수신한 data를 복호화 한다.
A 키로 암호화 한다면, B키로 복호화가 가능하고, B키로 암호화를 한담녀 A키로 복호화가 가능하다. Public Key는 널리 배포될 수 있기 때문에 많은 사람들이 한 명의 Private Key 소유자에게 data를 보낼 수 있다.
Private Key(개인키)
Private Key의 소유자가 Private Key로 data를 암호화하고 Public Key와 함꼐 전달한다. 이 과정에서 Public Key와 data를 획득한 사람은 Public Key를 이용하여 복화가 가능하다. 이런 위험에도 불구하고 이 방법을 사용하는 이유는 data 보호의 목적 보다는 Public Key data 제공자의 신원을 보장해주기 때문이다.
암호화된 data가 Public Key로 복호화 된다는 것은 Public Key와 쌍을 이루는 Private Key에 의해서 암호화 되었다는 것을 의미한다. 즉 data 제공자의 신원 확인이 보장 된다. 예를 들면 전자 서명을 이야기 할 수 있다.
전자 서명
전자 서명이란 원본 데이터가 자신의 것이라는 의미로 원본 데이터에 추가적으로 붙이는 데이터다. B가 A로부터 원본 데이터를 받을 때 전자 서명을 사용한다면 B는 받은 원본 데이터가 위변조 되지 않은 A의 데이터임을 확신할 수 있다.
- 위조 : 원래부터 진짜가 아님(진짜를 모방해 그럴듯한 가짜를 만듬)
- 변조 : 원래 진짜였지만 동일서을 해치고 변하게 만들어서 가짜가 됨
B는 A로부터 암호문을 받기 위해 공개키를 보냈다. 하지만 악의적인 사용자가 공개키를 가져가 B에게 암호문을 보냈다.
B는 받은 데이터가 A가 보낸 데이터임을 확인하고 싶다. 이때 전자 서명을 사용한다면 받은 데이터가 A의 것인지 확인 할수 있다.
B는 A로부터 계약에 동의한다는 전자 문서를 받았다. B는 계약을 진행했는데 갑자기 A가 계약에 동의하지 않았다고 발뻄을 한다. 계약이 중간에 취소될 경우 크게 손해를 볼 B는 전자 문서를 보여주며 항의를 하는데 A는 전자 문서가 자신의 것이 아니라고 주장한다. 이때 전자 서명을 한다면 해당 전자 문서를 A가 보냈음을 인증 할 수 있다.
전자서명 정리
A 동작 방식
1. A는 원본 데이터에 해시 함수를 적용해 메시지 다이제스트를 생성한다. (메세지 암축 함수 = 메시지 다이제스트)
2. A는 자신의 개인키로 메시지 다이제스트를 암호화한다,
3. 원본 데이터에 암호화된 메시지 다이제스트를 붙여 보낸다.
B 동작 방식
1. B는 원본 데이터와 메시지 다이제스트를 수신했다.
2. B는 A의 공개키로 암호화된 메시지 다이제스트를 복호화한다.
3. 원본 데이터에 A와 동일한 해시 함수를 사용해 메시지 다이제스트를 얻는다.
4. 2번의 메시지 다이제스트와 3번의 메시지 다이제스트를 비교한다. 같다면 A가 보낸 데이터라는 걸 확신할 수 있으며 다르면 위변조 됬다는걸 확신할 수 있다.
위 동작 방식에서 원본 데이터는 암호화되지 않고 전송하기에 노출될 수 있다. 중요한 데이터라면 A는 원본 데이터를 B의 공개키로 암호화한 뒤 암호문을 토대로 전자 서명을 생성해 보낸다. 결론으로 A의 개인키가 노출되지 않는 이상 B는 받은 원본 데이터가 위변조 되지 않은 A의 데이터임을 확신 할 수 있다.
Scirpt
대칭키는 속도가 빠르다는 장점이 있지만 키를 자주 교환해야하며 보안이 약하다는 단점이 있다. 하지만 반대로 비대칭키는 2개의 키가 사용되어 보안이 좋지만 속도가 느리다. 그래서 우리는 중요한 정보(회원정보, 카드정보) 등 보안을 신경써야하는 부분에서는 비대칭키를 사용하지만 대부분 대칭키를 사용하여 서버에 무리가 가지 않도록 한다.
그렇다면 암호화에 대표적인 것이 무엇이 있을까? 일단 보안을 중요시 하는것을 생각해 보면, 은행, 비트코인, 전자거래 등이 있을 것이다. 이 것들은 비대칭키를 사용하여 개인키와 공개키를 가지고 있고 자신의 공개키를 은행에 주고 은행은 자신의 공개키를 전달한다. 은행한테 전달받은 공개키를 암호화해 암호문을 보내는 것이다. 즉 나는 은행의 공개키로 암호화 하고 은행은 나의 공개키로 암호화 하는것이다. 그러면 암호문을 복호화 할수 있는건 비밀키를 가진 은행 뿐인것이다.
참고 자료
https://www.youtube.com/watch?v=MR4sCU82tgo&t=66s