본문 바로가기

Server Infra/Security

보안 스터디 - 인증 암호화 (4/?)

728x90

리얼월드암호학 4장을 요약해보았다. 이 장은 인증에 대해 암호화가 무엇인지와 어플리케이션에서 암호화를 어떤식으로 사용하는지에 대해 다룬다. 

 

만약 A라는 사용자와 B라는 사용자가 메시지를 서로 주고 받는다고 생각해보자. 이전의 MAC을 사용하기 이전에 1, 2장의 내용을 보면 이들은 cipher라는 암호화 알고리즘을 사용할 것이다. 만약 이 둘이 메시지 플랫폼을 사용한다면 메시지 플랫폼에서는 메시지를 암호화 하고 무작위로 보이는 문자열로 변환한뒤 대상하게 전달하고 이 암호를 푸는 형태의 로직을 가지고 있어야 한다. 이때 이 플랫폼은 아래의 두 가지를 포함한 암호화 알고리즘(encryption algorithm)

  • 비밀 키 : 예측할 수 없고 임의적인 특성을 지니고 있는 키
  • 평문(Plain Text) : 암호화를 하려는 대상

이 프로세스를 통해 암호화된 콘텐츠인 암호문(ciphertext)을 생성한다. 이 암호문은 비밀키를 모른다면 해독 할 수 없을것이다. 따라서 대상은 복호화 알고리즘(decryption algorithm)을 가지고 있어야 한다.

  • 비밀 키 : 메시지를 전달할때 사용한 비밀 키와 동일한 키
  • 암호문 : 대상으로부터 전달된 암호화된 메시지

따라서 이 비밀 키를 알고 있지 않다면 어떠한 사용자도 A와 B의 메시지를 볼 수 없을것이다.

비밀키를 공유할지 대칭 키를 사용할지는 비즈니스 요구사항에 맞춰서 구성하자

자 그렇다면 메시지를 받는 쪽에서 해독을 해야 한다면 이전 요약에서 이야기한 단방향 암호화인 해시 알고리즘을 사용할 수 없다. 이것을 해독한다면 그것만으로 박사 논문감일것이다. 따라서 이 책에서는 대중적인 AES 알고리즘을 설명한다.(나 또한 DRM 회사에 재직중일때 대부분의 암호화 알고리즘은 AES 기반으로 개발하였다)

AES?

AES는 3가지 버전이 있다. AES-128, AES-192, AES-256 이렇게 있다. 뒤에 숫자는 앞서 소개한 SHA와 마찬가지로 비트수이다. 당연히 키의 길이는 크면 클수록 강력하다. 참고로 나는 개인적으로 128을 주로 사용했다. 이 책에서도 128정도로고 충분한 보안을 제공한다고 설명한다. 

이 알고리즘 또한 기본적으로 순열을 통해 암호화 된다. 가능한 모든 평문을 가능한 모든 암호문에 매핑한다. 키를 변경한다면 당연히 매핑이 변경될 것이다. AES-128이라면 2^128개의 매핑이 만들어진다.

 

사실 이것의 자세한 알고리즘은 책에서 소개하는것을 100% 이해하기 힘들었다.(그래서 넘어가려 한다. 정말 암호학문에 대한 내용이기에 실무에서 AES알고리즘을 바퀴부터 만들것이 아니라면...꼭 알고 있을 필요는 없을것 같다. 궁금하면 책을 사서 보던가...https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B8%89_%EC%95%94%ED%98%B8%ED%99%94_%ED%91%9C%EC%A4%80 여기를 읽어보아라.)

 

CBC 모드

이 CBC모드는 실제로 DRM쪽 시장에서 또는 SaaS의 특정 API를 호출해서 사용하는 토큰을 암호화 하기 위해 사용하는 방식이라 좀 자세히 보려한다. 위에서 이야기 한것처럼 AES-128이 128비트 평문을 받아 128비트 암호문을 생성한다면, 만약 평문이 128비트가 아닐때 어떻게 처리될까?

 

이때 사용되는것이 패딩(padding)과 작동 모드(mode of operation)인데 여기서 패딩은 아마 다들 잘 알것이다. 부족한 부분을 패딩 바이트를 선택해 추가하여 128비트 크기를 맞춘다. 물론 복호화 하는 부분에서도 패딩을 제거해야 하는 알고리즘이 필요할 것이다. 이때 사용되는 알고리즘이 PKCS#7 라고 한다. 다만 이럴경우 암호문에 반복패턴이 생기기 때문에 암호화 하더라도 대략적인 정보가 누설된다. 아래의 그림이 대표적인 취약점 노출의 결과다. (구글에 ecb penguin 키워드로 검색하면 다양하게 나온다)

https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8_%EC%9A%B4%EC%9A%A9_%EB%B0%A9%EC%8B%9D

따라서 실제 업무에서는 IV(Initialization Vector)라는 임의의 값을 추가하여 무작위 암호화 하기위한 CBC를 사용한다. 이 알고리즘 또한 물론 XOR연산이 들어간다. 16바이트의 IV를 만들어서 평문의 첫 16바이트와 XOR 연산을 하여 무작위 하기 때문에 동일한 평문을 두번 암호화 해도 IV가 다르다면 다른 결과가 나온다. 만약 평문이 더 길다면 그 뒤에도 동일하게 IV와 XOR 연산을 한다. 

대략적으로 돌아가는 방식

위와 같은 방식으로 복호화 할때 IV가 함께 필요하다. 따라서 암호문과 같이 평문으로 받아야만 복호화가 가능하다. 물론, IV는 임의적인 값이기 때문에 드러난다 하더라도 정보의 이슈는 없다. 다만, IV 라 이야기 하고 고정된 값으로 쓰는 경우를 종종 보았는데 이 책에서 IV는 고유해야 하며 예측할 수 없어야 한다고 말한다.

 

또한 암호문과 IV를 함께 보내는데 공격자가 이 두개의 값을 탈취한뒤 수정해서 보내는 공격을 차단할 수 없다. 무결성 메커니즘 또한 없다. 따라서 IV의 무결성을 보호하기 위한 로직이 추가적으로 필요하다. 이때 이전 장에서 이야기한 MAC을 함께 사용하여 무결성을 보장 할 수 있다.

 

AES는 실무의 어디에서 이용될까?

참고로 대칭되는 암호화 방식은 정말 다양한 곳에서 사용된다. AWS만 해도 S3와 같이 자체 키를 가지고 AES 암호화 하거나 KMS를 사용하여 암호화를 진행한다. EBS또한 마찬가지이다.

 

따라서 이 책에서도 디스크 암호화와 데이터베이스의 컬럼을 암호화 하는 두가지 사용방식을 소개한다. 특히 좀 흥미로운 부분이 검색 가능한 암호화(searchable encryption)이다. 이건 동형암호화와 같은 느낌이다. TDE 솔루션을 사용하여 일부 열을 암호화 하는 경우 이를 사용하는 클라이언트는 해당 솔루션(디아모, Oracle TDE나 MS의 TDE...)을 통해 암복호화를 수행하기 때문에 쿼리를 하는 것에 문제가 없어 보이지만 솔루션이 빠진다면 이 자체로 검색 쿼리가 불가능해진다.

 

이 책이 쓰여진 시절의 암호화 방식에 동형암호과 수면 위로 떠오르기 이전이기에 책에서는 연구의 필요성을 이야기 하지만 최근에는 동형 암호화 방법론이 화두로 떠오르고 있다. 암호화를 풀지 않고 연산을 수행하는 방법이다.

https://ko.wikipedia.org/wiki/%EB%8F%99%ED%98%95%EC%95%94%ED%98%B8

 

동형암호 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 동형암호Homomorphic Encryption기원RLWE(Ring learning with errors)관련 방식사적 집단 교차(Private set intersection) 동형암호(同型暗號,Homomorphic Encryption, HE)는 데이터를 암호화

ko.wikipedia.org

물론 성능에 대한 문제는 트레이드 오프다. 아직까지 상용화가 된것 같진 않아 주의 깊게 지켜보는 중이다.

 

다음은 DH 키 교환 방식에 대한 장인데 이건 넘어가고 RSA 비대칭, 하이브리드 암호화에대해 정리해보려 한다. 후반부로 갈 수록 TLS, PKI와 같이 실제로 사용하고 어디서 들어본 녀석들이 나오기 시작한다.

728x90