대칭암호와 비대칭 암호
요즘 대칭키와 비대칭 키를 많이 사용하고 있으며 서로의 장단점이 있다. 대칭키와 비대칭키는 어디서부터 시작되었는지, 암호화 방식은 어떠한 지에 대해서 정리해보고자 한다.
대칭 암호
- 문자 암호에서 비트열 암호로
- 부호화
- 암호화엔 컴퓨터 사용이 필수
- 암호화 프로그램도 평문을 비트열로 하고 비트열로 된 암호문을 출력
- 부호화란 문자열을 비트열로 바꾸는 것
- midnight를 비트열로 바꾸면? m -> 01101101, i -> 01101001 ...
- XOR 배타적 논리합
- 0 XOR 0 = 0, 0 XOR 1 =1 / 서로 다르면 1
- 기호는 ⊕를 사용
- 평문 비트열 A와 키 비트열 B를 XOR 하면 암호문, 다시 키로 XOR하면 평문으로 복호화할 수 있다.
- 01001100 : A
- ⊕ 10101010 : B => A ⊕ B : 11100110
- A ⊕ B ⊕ B : 11100110 ⊕ 10101010 => 01001100 다시 A 평문이 됨
- 이를 기반으로 한 대칭 암호 알고리즘이 DES이다.
- 64비트 평문을 64비트 암호문으로 암호화하는 대칭 암호 알고리즘
- 키의 비트 길이는 56비트
- 64비트 평문을 하나의 단위로 모아서 암호화
- 키 분배 이슈가 있다! -> 키를 어떻게 배포할 것인지.. ----- 제일 중요한 문제!!
- DES는 전사 공격으로 현실적인 시간 내에 해독 가능하다.
- 부호화

- 트리플 DES 암호화
- DES보다 강력하도록 DES를 3단 겹치게 한 암호 알고리즘
- 암호화할 때 키 3개를 사용하여 암호화하며 복호화 과정은 암호화 과정의 역순이다.

※ 트리플 DES는 은행 등에서 현재에도 사용하지만 처리 속도는 빠르지 않고, 안전성 면에서도 풀려버린 사례가 있으며 우리나라에선 3-DES를 표준으로 정하지 않음 -> 점차 AES로 대체!
- AES(Advanced Encryption Standard)
- DES를 대신한 새로운 표준 대칭 암호 알고리즘
- AES의 후보로서 다수의 대칭 암호 알고리즘을 제안, 그중 Rijndael이라는 대칭 암호 알고리즘이 2000년에 AES로 선정
- 장점
- 고속
- 다양한 플랫폼
- 현재 까지도 안전
- 사용 권장됨
- Rijndael 암호 알고리즘
- 벨기에 연구자 Joan Daemen과 Vincent Rijmen이 설계한 블록 암호 알고리즘
- 블록 길이 128비트, 키의 비트 길이는 128, 256, 32비트
- 복수의 라운드(round)로 구성 (10 ~ 14)
- SPN 구조
- SubBytes
- ShiftRows
- MixColumns
- AddRoundKey
- 라운드 알고리즘 까진 다루지 않겠습니다.. 너무 어려움 ㅠ
- 대칭 암호의 가장 핵심인 키 배송 문제
- 키의 사전 공유에 의한 해결
- 안전한 방법으로 키를 사전에 건네주는 것
- 직접 전달은 안전
- 이메일/일반 메일 등은 위험
- 인원이 많아지면 관리해야 할 키 수 증가
- 사원 1000명이 자신 이외의 사람들 999명과 통신할 가능성이 있다면 통신용 키는 1인당 999개가 필요 -> 1000명이 999개를 모두 가진다면 회사 전체에 필요한 키의 수는 현실적이지 못하다..
- 안전한 방법으로 키를 사전에 건네주는 것
- 키 배포 센터에 의한 해결
- 암호 통신 때마다 통신용의 키를 키 배포 센터에 의뢰해서 개인과 키 배포 센터 사이에서만 키를 사전에 공유
- 엘리스와 밥이 암호 통신을 할 때 키 배포 센터에서 세션 키를 생성
- 엘리스와 밥의 키를 꺼내 기존 키로 세션 키를 암호화해서 각각에게 보낸다
- 엘리스와 밥은 세션 키를 복호화(엘리스의 키로 암호화되어있기 때문)해서 세션 키를 얻고 둘의 통신에 세션 키를 사용하여 암호화
- 통신이 종료되면 세션 키를 삭제
- 구성원 증가 시 키 배포 센터의 부하
- 키 배포 센터의 컴퓨터가 고장 나면 전체 암호 통신 마비
- 키 배포 센터만 공격해서 모든 키를 탈취할 수 있음
- 암호 통신 때마다 통신용의 키를 키 배포 센터에 의뢰해서 개인과 키 배포 센터 사이에서만 키를 사전에 공유
- Diffie-Hellman 키 교환
- 암호 통신을 원하는 두 사람이 있다면 어떤 정보를 교환
- 이 정보는 제 3자에게 노출되어도 무방
- 두 사람은 교환한 정보를 가지고 동일한 키를 각각 생성할 수 있다.
- 제 3자는 같은 키를 만들 수 없다.
- 암호 통신을 원하는 두 사람이 있다면 어떤 정보를 교환
- 공개 키 암호에 의한 해결
- 공개 키 암호는 암호화 키와 복호화 키가 다르다.
- 수신자는 노출돼도 무방한 암호화 키를 송신자에게 전송한다.
- 송신자는 암호화 키로 암호화해서 수신자에게 전송
- 암호문을 복호화할 수 있는 복호화 키는 수신자에게만 있기 때문에 제 3자가 암호화 키를 탈취해도 해독할 수 없다.
- 키의 사전 공유에 의한 해결
대칭 암호 정리
- 대칭 알고리즘은 비대칭 암호에 비해 적은 컴퓨터 전력으로 빠르게 암호화하고 복호화할 수 있다.
- 암호화의 보안은 키 길이를 증가시킴으로써 향상할 수 있다. (현실 시간 내에 전사 공격으로 해독 못하게)
- 암호화와 복호화에 사용되는 키를 전송하는데 어떻게 안전하게 제 3자에게 탈취당하지 않고 전송할 수 있는지가 문제점이자 단점으로 남아있다.
- 현재는 웹 프로토콜을 통해 대칭 암호화와 비대칭 암호화를 혼합해 안전한 접속을 설정하며 Transport Layer Security(TLS) 암호화 프로토콜이 대표적인 예시이다.
- SSL/TLS HTTPS에 대한 정리 글: 여기
- 미국 정부는 AES를 기밀과 중요한 정보를 암호화하는 데 사용
대칭 암호는 키의 길이가 커질수록 해독해내는데 엄청난 시간이 걸리게 된다고 한다.(공격 시)
요즘은 대칭 암호와 비대칭 암호를 적절히 혼합한 하이브리드 시스템을 활용한다고 한다. 대칭 암호의 경우 빠르고 보안성이 뛰어난 반면 키를 전송하는데 문제가 있어서 이에 대한 대처로 하이브리드로 사용하는 듯싶다.
대칭 암호 방식은 은행의 공인인증서 사용 사례가 있다.
요즘은 잘 사용하지 않지만 몇 년 전까지만 해도 우리는 은행의 인증서를 발급받고 이때 키는 은행에서 관리하고 따로 키를 배포하지 않았다!!.. 하지만 은행의 보안이 유출된다면?? 그 사용자들의 대칭 키들을 다 유출당해버린다면 과연 믿고 은행에 돈을 맡길 수 있을까???.. 아무리 강한 보안이라도 해커들은 새로운 공격을 계속 시도하는 세상에 보안이 유지될 수 있을까?라는 의문이 든다... 그래서 요즘은 잘 사용 안 하는 게 아닌가.. 혹은 OTP 기기를 활용한 2-factor 인증 등이 나타난 게 아닌가 생각이 들었다.!
비대칭 암호(공개 키 암호)
- 공개 키를 전송자가 정보를 암호화하는 데 사용하고, 개인 키는 수신자가 암호를 해독하는 데 사용하며 공개 키는 개인 키의 보안에 영향을 주지 않기 때문에 안전하게 공유될 수 있다.
- 비대칭 암호 방식 알고리즘은 수학 적으로 연결된 키 쌍을 생성하므로 대칭 암호 방식에서 사용되는 키 보다 훨씬 길이가 길다.
- 1024에서 2048비트 사이의 길이로 인해 공개 키를 통해 개인 키를 계산해내는 것은 현실 시간 이내에 불가능하다.
- 일반적인 공개 키 알고리즘은 RSA이다.
- Ron Rivest, Adi Shamir, Leonard Adleman의 이니셜을 딴 RSA
- RSA 암호화는 암호문 = (평문)^E mod N의 식으로 표현됨.
- (E, N): 공개 키
- E와 N이라는 한 쌍의 수를 알면 누구라도 암호화를 진행할 수 있다.
- E와 N이 RSA 암호화에 사용되는 키
- (E, N): 공개 키
- 복호화는 평문 = (암호문)^D mod N
- (D, N): 개인 키
- D와 N이라는 한 쌍의 수를 알면 누구라도 복호화를 진행할 수 있다.
- D와 N이 RSA 복호화에 사용되는 키
- E와 D는 밀접한 연관관계이다.
- (D, N): 개인 키
- RSA의 구체적 계산 예시는 여기에 간단하게 정리되어있다.
한계점
- 암호화 및 해독과 관련된 복잡한 수학적 계산 때문에, 대량의 데이터에 대해선 매우 느려질 수 있다.
- 비대칭 암호 방식은 개인 키가 안전하게 보호된다는 가정을 전제로 하고 있다.
- 개인 키는 오직 사용자가 관리하기에 사용자의 실수, 삭제 등에 의해 암호화된 데이터에 접근할 수 없게 될 수 있다.
활용
- 웹 사이트에 대한 보안 연결을 가능하게 하는 SSL(Secure Sockets Layer)프로토콜에서 비대칭 암호화 기능을 사용
- SSL/TLS HTTPS에 대한 정리 글: 여기
- 디지털 서명 확인 시스템
- 블록체인 및 암호 화폐기술에서 암호 화폐 지갑이 설정될 때, 한 쌍의 키(공개 키, 개인 키)가 생성됨.
- 암호화된 메시지에 서명하는 데 사용할 수 있음. (무조건 사용하진 않음)
나는 공개 키 암호 방식에 대해선 대표적인 예시로 ssh 접속에 필요한 키 교환 과정이 떠올렸었다.
이번에 정리를 하면서 ssh 접속을 할 때 잠깐 딜레이가 걸리는 게 느껴졌는데 이는 키가 RSA 알고리즘을 사용해서 딜레이가 걸렸구나라고 생각하게 되었다. 처음에는 내 네트워크 문제인 줄 알았다 ㅎㅎ..

공부하면서 정리했던 내용이 다 들어 있는 것 같다..!
SSH 인증 과정을 떠올리면서 비대칭 키 암호 방식에 대해 설명하면 좋을 것 같다!!
프로젝트를 진행하다 보면 비밀번호 같은 부분은 일방향 해시를 통해 보안적인 요소를 구성했는데
일방향과 양방향 해시의 차이점과 사용 이유를 정리해 보도록 하겠다..!
계속 이유를 모르고 프로젝트에 사용했던 CS적인 부분들을 정리해 나가겠다