Skip to content
암호화
×
문서 생성 시각 2021-04-23 21:04:11 최근 수정 시각 2022-11-18 14:51:01

암호화

  • 임의의 키를 통해 평문을 암호문으로 만드는 처리
  • 반대로 키를 통해 암호문을 평문으로 만드는 처리는 복호화라고 한다.
  • RSA 공개키 암호화 알고리즘은 큰 수를 소인수분해하기 어렵다는 점을 이용한 암호화 알고리즘으로 두 개의 큰 소수를 기반으로 두개의 키를 생성하고, 이를 이용해 메세지를 암호화/복호화한다. (키가 있어야 복원 가능)

암호화의 방식

대칭키 암호화

  • 암호의 발신자와 수신자가 동일한 알고리즘과 그 열쇠를 공유하는 방식
    • 알파벳을 1칸 앞으로(secret key) 옮기는 방식의 암호 알고리즘을 이용하면 helloifmmp로 암호회 되고, 암호 키를 알고 있다면 역으로 복호화도 가능하다.
  • 속도가 빠르고 연산량이 적지만, 키가 유실되면 보안 체계가 그대로 무너지기 때문의 키의 분배가 힘들다.

비대칭키 암호화

  • 대칭키의 키 분배 문제를 해결한 방식
  • 공개키(Public Key), 개인키(Private Key)라고 불리는 두개의 키를 생성
  • 공개키로 암호화한 암호문은 개인키로만 복호화가 가능, 개인키로 암호화한 암호문은 공개키로만 복호화가 가능
  • 발신자는 사전에 입수한 수신자의 공개키로 메시지를 암호화하고 수신자는 전달 받은 암호문을 개인키로 복호화할 수 있다.
  • 서버-클라이언트와 같은 일대다 구조에서 키의 분배 문제를 해결할 수 있지만 속도가 느리고 연산량이 많은 단점이 있다.
  • 공개키는 모두에게 공개되어 있다. 그래서 누가 중간에 가로챌 수 있지 않나?
    • -> '무엇이 암호화된 것이냐' 보다 '누가 보낸 것이냐'에 초점을 두는 것
    • 따라서 공개키로 열리는 것이라면 보낸이가 개인키로 암호화했다는 것이 증명된다. 즉, 신원확인이 되는 것.

전자서명

  • 비대칭키 알고리즘인 RSA는 전자서명에 많이 이용되고 있다.
  • 데이터의 작성자를 증빙하기 위해 데이터에 전자적인 서명을 첨부하는 것
    • 우선 원본 데이터를 공개된 방법으로 해싱하여 특정 길이의 문자열로 만든다.
    • 그 해시값을 작성자의 개인키로 암호화한 전자서명을 생성해 원본 데이터에 첨부, 수신자에게 발송
    • 수신자는 받은 전자서명을 작성자의 공개키로 복호화, 이를 받은 데이터를 해싱한 해시값과 비교
    • 두 해시값이 동일한지 비교해 데이터의 작성자와 데이터가 변조되지 않았음을 검증

인증서

  • 단순히 전자서명만으로는 데이터의 생성자, 즉 공개키 소유자의 실제(오프라인) 신원을 증빙할 수 없다는 문제가 있음
  • 전자서명에 이용할 키 쌍을 정부기관이나 은행 등 공인된 기관에서 개인정보를 인증해 발급받을 수 있다.
  • 인증서에는
    • 발급자의 신원 정보
    • 발급자의 공개키
    • 인증 유효기간
    • 인증기관 정보
    • 위 모든 내용에 대한 인증기관의 전자서명
  • 공개키 및 인증서를 활용하는 소프트웨어, 플랫폼, 정책, 제도 등을 통틀어 공개키 기반 구조(PKI; Public Key Infrastructure)라고 한다.
    • HTTPS, SFTP, SSH, SCP 등 SSL 위에서 작동하는 프로토콜, 공인 인증서를 이용한 금융거래까지

SSL 연결 과정 (SSL HandShake)

  1. 서버는 클라이언트에게 인증서(+공개키) 전달
  2. 이때 클라이언트는 서버의 인증서를 본인이 미리 알고 있는 CA 목록을 통해 검증해서, 신뢰할 수 없는 서버의 경우 유저에게 경고 가능
  3. 클라이언트는 대칭키를 하나 생성해서 서버의 공개키로 암호화하여 서버에 전달
  4. 이후 양측간에 주고 받는 데이터는 대칭키로 암호화
  • SSL에서는 비대칭키로 최초의 연결을 맺지만, 실제 통신에서는 서버측의 연산량 절감을 위해 대칭키를 사용한다.

HTTPS (HTTp over SSL)

  • Let's Encrypt 라는 비영리 CA가 있음
  • HTTPS의 보급을 위해 무료로 인증서를 발급해주고 있다.

reference