[알고리즘] 데이터 암호화

silver0·2022년 8월 1일
0

Algorithm

목록 보기
12/14

공통키 암호 방식 : 암호화와 복호화에 같은 키를 사용
공개키 암호 방식 : 암호화와 복호화에 다른 키를 사용

공통키 암호 방식

공통키 암호 방식은 암호화와 복호화에 같은 키를 사용한다.

공통키 암호 방식은 '대칭형 암호 방식', '비밀키 암호 방식', '공유키 암호 방식' 등으로 불리기도 한다.

계산 방법

  • 시저 암호(Caesar cipher)
  • AES(Advanced Encryption Standard)
  • DES(Data Encryption Standard)
  • 원타임 패드(one-time pad, OTP)

등이 있으며, 현재는 AES가 주로 사용되고 있다.

데이터 전송의 전체 흐름

A가 B에게 인터넷을 경유해서 데이터를 전송하려 한다.
데이터가 노출될 위험이 있으므로 암호화해서 전송해야 한다.

  1. A는 키를 사용해서 데이터를 암호화한 암호문을 만든다.
  2. A가 암호문을 B에게 전송한다.
  3. B는 A에게 받은 암호문을 같은 키를 사용해서 복호화 한다.
  4. 이것으로 B는 원 데이터를 얻을 수 있다.

문제점

공통키 암호 방식의 큰 문제점은 X도 키를 훔쳐볼 가능성이 있고,
X도 키를 사용해서 암호문을 복호화할 할 수 있다.

키를 도난당할 위험으로 다시 키를 암호화해서 보낸다고 문제가 해결되지 않는다.
키를 암호화하기 위해 사용할 키도 X가 훔쳐볼 가능성이 있으므로 문제가 반복되게 된다.

키 분배 문제

공통키 암호 방식에서는 키를 안전하게 전달할 방법이 필요하다.
해결 방법으로는 '키 교환 프로토콜을 사용하는 방법'과 '공개키 암호 방식을 사용하는 방법' 두 가지가 있다.




공개키 암호 방식

공개키 암호 방식은 암호화와 복호화에 서로 다른 키를 사용하는 방식이다.

다른 키를 사용한다는 의미에서 '비대칭 암호'라고 부르는 경우도 있다.

  • 암호화에 사용하는 키: 공개키(P, public key)
  • 복호화에 사용하는 키: 비밀키(S, secret key)

계산방법

공개키 암호 방식을 구현하는 알고리즘을 찾는 것은 쉽지 않다.
암호의 계산 프로세스로부터 필요한 조건을 정리해보면, 아래와 같다.

  1. 특정 숫자를 사용해서 암호화(계산)할 수 있고,
  2. 다른 숫자를 사용해서 계산하므로 원 데이터로 복원할 수 있으며,
  3. 한쪽 키에서 다른 한쪽 키를 추측할 수 없는 연산
  • RSA 암호
  • 타원곡선 암호(Elliptic Curve Cryptography)

등이 있고, 현재는 RSA가 주로 사용되고 있다.

데이터 교환의 전체 흐름

  1. A가 B에게 인터넷을 통해 데이터를 전송하려 한다.
  2. 데이터를 전달받는 B가 공개키(P), 비밀키(S)를 만든다.
  3. 그 중 공개키를 A에게 전송한다.
  4. A는 B에게 받은 공개키를 사용해서 데이터를 암호화한다.
  5. A는 암호문을 B에게 전송하고, B는 받은 암호문을 비밀키를 사용해 복호화한다.

여기서도 악의를 가진 제3자 X가 훔쳐볼 가능성이 있다.
하지만 공개키로는 암호문을 복호화할 수 없으므로 X는 원 데이터를 얻을 수 없고,
공통키 암호 방식과 달리 '키 분배 문제'가 발생하지 않는다.

불특정다수 데이터 교환 용이

이외에도 불특정다수 간 데이터 교환이 쉽다는 장점이 있다.
공개키는 다른 사람들에게 노출돼도 문제가 없지만 비밀키는 노출되지 않도록 엄중히 관리해야 한다.

  1. B에게 데이터를 전송하고 싶은 다수의 사람들은 B가 공개한 공개키를 가져온다.
  2. 전송하고 싶은 데이터를 공개키를 이용하여 암호화한다.
  3. 암호문을 B에게 보낸다.
  4. B는 받은 암호문을 비밀키를 사용해서 복호화한다.

위와 같은 방법으로 B는 원 데이터를 얻을 수 있고,
데이터를 전송하는 상대방 모두가 키를 가지고 있을 필요가 없다.
데이터를 받는 쪽만 노출되지 않는 키(비밀키)를 소유하면 되므로 안정성도 높다.

문제점

암호화 및 복호화 시간

공통키 암호 방식은 사람이 늘어나면 필요한 키의 수가 급격하게 증가한다.
5명이면 100개, 100명이면 4,950개가 필요하다.

  • nn=사람수, n(n1)2\frac{n(n-1)}{2}

그러므로 암호화 및 복호화에 시간이 많이 소요된다는 문제가 있다.
상세한 데이터를 연속적으로 교환하는 구조에는 적합하지 않다.

문제해결 : 하이브리드 암호 방식

신뢰도 문제

B가 공개키와 비밀키를 만드는 시점에 신뢰도에 대한 문제가 있다.

  • B가 작성한 공개키 = PB, 비밀키 = SB
  • X가 작성한 공개키 = PX, 비밀키 = SX
  1. 제3자 X가 공개키(PX)와 비밀키(SX)를 만든다.
  2. B가 A에게 공개키(PB)를 보낼 때, X가 만든 공개키(PX)로 바꾸어 A에게 전달한다.
    • 공개키 자체에는 누가 작성했는지 표시가 안되어있으므로 A는 공개키가 바뀐 것을 알 수 없다.
  3. A는 X가 건낸 공개키(PX)로 암호화를 한다.
  4. A가 암호문을 B에게 보낼 때, X가 암호문을 가로챈다.
  5. X가 만든 공개키(PX)로 암호화 되었으므로 X의 비밀키(SX)로 복호화할 수 있다.
  6. X는 B의 공개키(PB)로 데이터를 암호화하고 작성한 암호문을 B에게 전달한다.
  7. X가 보낸 암호문은 B가 만든 공개키(PB)로 작성한 것이므로 B는 비밀키(SB)로 복호화할 수 있다.

이 과정에서 A는 공개키가 바뀐 것을 모르고, B는 도중에 데이터가 노출된 것을 모른다.
이러한 공개키 바꿔치기로 데이터를 가로채는 기법을 'man-in-the-middle 공격'이라고 한다.

문제의 원인은 A가 받은 공개키의 작성자가 B인지 판단할 수 없다는 점이다.

문제해결 : 전자 인증서




하이브리드 암호 방식

공통키 암호 방식에는 키를 안전하게 교환해야 하는 '키 분배 문제'가 있었고,
공개키 암호 방식에는 암호화와 복호화의 처리 속도가 느리다는 문제가 있었다.
하이브리드 방식은 이 두 가지 방식을 결합해서 약점을 보완한 방식이다.

암호화에는 처리 속도가 빠른 공통키 암호 방식을 사용하고,
키는 키 분배가 불필요한 공개키 암호 방식을 사용한다.

데이터 전달 흐름

A는 B에게 공통키를 안전하게 전달해야 한다.
공통키는 공개키 암호 방식으로 암호화하여 안전하게 전달할 수 있다.


  1. B는 공개키와 비밀키를 생성하여 공개키를 A에게 보낸다.
  2. A는 B에게 받은 공개키를 사용해서 공통키를 암호화한다.
  3. A는 암호화한 공통키를 B에게 전달한다.
  4. B는 비밀키를 사용해서 공통키의 암호문을 복호화한다.
    • A는 안전하게 공통키를 전달에 성공했고, 공통키로 만든 암호화 데이터를 보내면 된다.
  5. A는 공통키를 사용한 암호화 데이터를 보낸다.
  6. B는 공통키를 이용해 암호문을 복호화할 수 있고, 안전하게 원 데이터를 취득할 수 있다.

하이브리드 암호 방식은 안정성과 속도를 모두 만족한다.
이 암호 방식은 인터넷상에서 정보를 안전하게 교환하기 위한 프로토콜인 'SSL(Secure Scokets Layer)'에서 사용 된다.
현재는 버전이 업그레이드되면서 'TLS(Transport Layer Security)'라는 명칭을 가지고 있다.




Reference

  • 『알고리즘 도감』, 이시다 모리테루, 미야자키 쇼이치 - 제이펍
  • 사진 출처 : 알고리즘 도감 어플
profile
작은 일이라도 꾸준히 노력하면 큰 뜻을 이룰 수 있다

0개의 댓글