본문 바로가기

DevOps

[AWS EKS] (16) EKS 스터디 6주차 ( 암호학 - 대칭키와 비대칭키)

CloudNet@팀의 EKS 스터디 AEWS 2기에 작성된 자료를 토대로 작성합니다.
 암호(대칭키/비대칭키), 전자서명, PKI(X.509) 등 이해를 돕기 위해 다음 포스팅을 공유 합니다

 

대칭키 암호화 방식

  • 대칭키 암호화 방식 : 
    • 쌍방이 공유하는 하나의 비밀키를 사용하여 암호화하고 복호하는 방식으로서, 대칭(symmetric) 혹은 관용(conventional) 암호 방식이라고 한다.
    • 블록 암호화 방식(Block cipher) : DES, 3DES, IDEA, RC4/5 등이 있음
    • 성능이 우수하고 암복호화에 CPU 리소스의 소모가 적으나, 비밀키 분실 시 복호화가 힘들며 비밀키를 상대방에게 전달 해줘야 하기 때문에 탈취 당했을 시 해킹 시도의 위협이 크다.

 

공개키 암호화 방식 

  • 공개키 암호화 방식
    • Public Key/ Private Key를 한 쌍으로 만들어, Public key로 암호화 하고, Private Key로 복호화
    • 공개키 암호에서는 서로 다른 두개의 키를 사용하고 있어 항상 공개키와 비밀키를 모두 생성함
    • 비밀키 대신 공개키를 전달 함, 공개키는 노출되어도 안전함
    • 성능이 좋지 않음 / CPU 리소스를 많이 소모하는 수학 연산을 수행

  • 디지털 서명? 
    • 특정 사용자가 타인에게 본인임을 증명하는 "인증" 용도로 사용되고, 공개키와 비밀키는 일반적인 암호화 과정과 반대로 사용됨
      • 메시지를 비밀키로 암호화 하여 생성된 암호문을 "디지털 서명" 이라고 하고, 공개키로 암호문을 복호화 하는것을 "서명을 검증 한다" 라고 함 
      • 공개키와 짝을 이루고 있는 비밀키로 암호문을 생성 해야만 디지털 서명을 검증하고, 서명을 생성한 사람이 누구인지 확인 가능 함

DES 실습 (1. 대칭키 암호화 방식)

https://emn178.github.io/online-tools/des/encrypt/

 

DES Encryption

This online tool helps you encrypt text or a file from local storage or a URL using DES. It supports various modes and padding schemes. It also supports PBKDF2 or EvpKDF, with customizable salt, iteration, and hash settings.

emn178.github.io

  • input: chilguy 입력 , Passphrase (aews-study)
  • Output : 53616c7465645f5fbef3aeaf65b12a1f19167674158607c8

Encryption에서 나온 output 값과 Passphrase 입력시 output 확인가능 

단방향 알고리즘( 해시 ) 알아보기

  • 파일 무결성 확인 방법
    • 파일 전체 비교 → 파일의 지문(fingerprint) 비교 : 해시 함수 적용의 결과값(다이제스트)을 비교
    • 일정한 크기의 출력: 해시 값의 길이는 메시지 길이와 관계 없음. 메시지가 1비트, 1기가바이트라도 고정된 길이의 해시 값을 출력
    • 메시지가 다르면 해시 값도 다름 : 메시지가 1비트라도 변화하면 해시 값은 매우 높은 확률로 다른 값이 되어야 함
    • 일방향성 : 해시 값으로부터 메시지를 역산할 수 없음 쉽게 암호화는 가능하지만 복호화는 불가능
    • 충돌 내성 : 총돌을 발견하는 것이 어려운 성질 - 강한/약한 충돌 내성

단방향 알고리즘(해시) 따라해보기

암호 알고리듬 테스트 온라인 사이트 : MD5 선택 - Link

  • MD5 : input - 1, 11, 111, kubernetes, 맨 뒤에 빈칸도 넣어보자
  • 무결성 체크를 위해 해시를 사용한다.

 

실습 RSA (2. 공개키 암호화 방식)

암호 알고리즘 테스트 온라인 사이트 : RSA 선택 - Link

 

RSA Key Generator

This online tool helps you generate a pair of RSA keys. The PEM format supports PKCS#1, PKCS#5, and PKCS#8.

emn178.github.io

 

1. Private Key 와 Public Key 메모해두기

  • 프라이빗 키 
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0+jKoTYJ63ic/C
tIrB1drCP8S1RSPzSM8n/CB278kXUjXIQvGwXImB9TVBWyus27Pmk+R+zm3PWX+V
nU3I/0z31sM+rw/FZHnf5L0KLIHvZKeKY6UtgNT2NDW3jCDQEB+nYVsLLtZuTnUo
p9zgfslgdLq8rz6vIAPCXkL1i72hAgMBAAECgYEAiahmi1f9MSQPykZiYUeT0UY1
uSX0fBbegY5mcKiwL5WkIDSXepv6J9DFijo9COLH3JqmAHDp7icqj5i+xGxAdDI2
SRWLdoUjBKKuoGtVvl1u/EWXCoHI/ggWILiq1VmWZB1oDGlBdEZP7ba8aRTvYL6Z
CLhr+rLguKCe6NHNbaUCQQDysAT2NJfwc32PFNYTbPyAVuzTM1sEzIQGL/D4azoJ
WGLG81MkNBiAT539iz5gVi3E1hvko/9HLFbFWNF5eZR3AkEA6WFo6LQMyYyx+Q/r
OHpwgG3XhAINHl4YNwOd6KKv/ci7/iSNwS+7Sb91CDR+5qnpnOBplZlU6/04sqq9
1xA8pwJADojWMzyhIOh5y5ju3Uj4smMCWf/IYrgw7AHxB5+8YRTnDY1DHHb2RLEA
AFBXkwN2SESedQoRXtzb8YPJP+I1LwJBAJdZIZTPtv86K+zOQwf0d2MCWOJ2BhXs
hZ2fzdchMirN9ASDph5jmvzfmcEBck6aYDLpYe+vaWBFbnCHw+dl0z8CQQCpZy39
ZR4ZYiw+XBd//B4cPdj1bSqU0jYdkB5nTFJHGtZw0d3sAZn5qDEfviGvovM3P6/a
GyMz9GdBeRumUXh/
-----END PRIVATE KEY-----
  • 퍼블릭 키 
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdPoyqE2Cet4nPwrSKwdXawj/E
tUUj80jPJ/wgdu/JF1I1yELxsFyJgfU1QVsrrNuz5pPkfs5tz1l/lZ1NyP9M99bD
Pq8PxWR53+S9CiyB72SnimOlLYDU9jQ1t4wg0BAfp2FbCy7Wbk51KKfc4H7JYHS6
vK8+ryADwl5C9Yu9oQIDAQAB
-----END PUBLIC KEY-----

2. Encryption : public key(위 메모값 붙여넣기) , Input(mypass!) → 출력되는 Output 메모해두기

188b37d6506a7ccf49223b64dc8f48876eec9841bc25064ae0f264b0d01e544fcacf4a6a0c3653ac56c7426e36f6d347afcf508496312188fe80d37eb7260efb3e4e67474eecf4cf5178308e2d4b0f2655cb572bafcb83265d088520300a825635c1d971abec32b62a17dcd5490f6cdb938e6ef7ac27001634ec66d0f5e722d6

3. Decryption : private key(위 메모값 붙여넣기) , Input(바로 위 암호 출력 값) → 출력되는 Output 확인!

 

고려사항

  1. 공개키 암호 방식은 지수승 연산 등과 같은 계산시간을 많이 필요로 하며, 덧셈과 같은 고속처리가 가능한 연산을 사용한 대칭키 방식에 비하여, 처리속도가 느린 단점이 있다. 따라서 대부분의 경우, 데이터 전송 시 공개키 방식보다는 대칭키를 사용하는 공유 비밀키 방식을 사용한다.
  2. 그렇다면 이 공개키 방식은 언제 사용되는가? 통신 쌍방이 암호화시 사용할 대칭키를 안전하게 분배할 때 주로 사용되여, 이 분배과정키 분배 방식이라고 한다. 이런한 키 분배 방식으로는 다음과 같은 방법이 있다.
    1. Arami 가 공유 비밀키를 선택하여 off-line으로 Borami에게 전달.
    2. Diffie-Helman 공유 비밀키 분배 방법.
    3. RSA 공개키 방식을 이용한 공유 비밀키 분배 방법.
    4. 키 분배센터(KDC) 방법을 이용한 공유 비밀키 분배 방법.
목표:

비대칭키로도 암호화 통신을 할 수 있겠지만 비대칭키 방식은 많은 컴퓨터 파워를 소모하기때문에, 실제로 데이터를 주고받을 때에는 대칭키를 사용하여 암호화를 진행합니다. 그러면 대칭키를 서버와 클라이언트 모두 가지고 있어야 할텐데요.

 따라서 통상적으로 이러한 방법을 사용합니다.

  1. 클라이언트는 주고받은 랜덤데이터를 조합하여 **PMS(Pre Master Secret)**이라는 일종의 난수값 생성
  2. 서버의 인증서 안에 들어있는 서버 공개키암호화해서 서버로 전송
  3. 서버/클라이언트는 PMS, Client 난수, Server 난수 세가지 값을 바탕으로 대칭키 생성
  4. 대칭키를 사용해 암호화 통신 시작

→ 이러한 기법은 노출되면 위험한 대칭키를 외부망에 노출시키지 않음으로써 안전하게 통신할 수 있다는 장점이 있습니다.

RSA 공개키 방식을 이용한 공유 세션 키 분배 방법

쌍방간에 RSA 공개키/개인키가 설정되어 있으면, 다음과 같은 방법으로 단기간 공유할 수 있는 비밀키를 분배한다.

하지만, 이 방법의 문제점은 다음과 같다 중간자공격 MiTM

이후, Arami와 Borami간 공유 비밀키 Ks로 암호화되어 전송되는 모든 메시지들은 Z에 의해 가로채어 질 수 있는 문제가 있다.

안전한 방법

Nonce(임시 값)을 사용하여 안전하게 Ks를 분배할 수 있는 방법은 다음과 같다.

 

 KDC(키 분배 센터) 에 의한 공유 세션키 분배 방법

  • 공개키를 사용하여 쌍방간에 공유 비밀키를 분배하는 앞의 여러 방법들의 핵심적인 문제는 호스트 n명에 대하여 n(n-1)/2개의 키가 요구되는 점이다.
  • 또한, 개별적인 수많은 상대방의 키들을 모두 저장하여야 한다면 엄청난 보안 위험이 따르는 문제가 있다.
  • 이러한 문제점을 해결하기 위한 방법 중 하나로, 단기간 사용될 세션키(Ks) 분배과정을 책임지는 제 3자인 Key Distribution Center**(KDC)**가 사용된다.
  • 이 KDC는 각 사용자에 대한 정보뿐만 아니라 사용자와 KDC만 알고 있는 장기 비밀키(master secret key, long-term key)를 미리 공유하고 있다.
  • 이 장기키를 사용하여, 통신 쌍방간에 필요한 **단기간의 세션키(Ks)**를 배포할 뿐만 아니라, 이들간에 상호인증(AS, Authencation Server)도 할 수 있도록 한다. 이러한 키 분배절차의 실제는 커버로스(Kerberos) 프로토콜이다.
  • 이러한 KDC를 사용하여, 호스트 Arami와 Borami와의 보안통신을 위한 세션키를 KDC로부터 내려 받는 과정의 예는 다음과 같다.

이러한 5가지 절차는 다음과 같이 세션키 분배과정과 인증과정으로 수행됨을 알 수 있다.

 

  • 이러한 KDC를 이용하면 단말간 세션키는 KDC에서 생성해 주기 때문에, 단말들은 오직 자신의 KDC에 등록한 마스터키만 보관하고 있으면 된다.
  • 그리고 단말간 연결시 필요한 세션키는 KDC로부터 할당받아 사용하고 사용 후에는 세션키를 파기한다.
  • 따라서 KDC를 사용하지 않고 단말들이 직접 키를 분배하는 경우에 비하여, 각 단말들은 키 생성 및 관리에 대한 부담을 경감할 수 있는 장점이 있다.

 

목표:

암호학 내용을 명확히 100% 이해 하지 못하더라도 시간날때마다 우리 스터디를 통해 들여다 보는 기회가 되어서 

이러한 제약들이 있어서 점차 웹사이트의 인증체계등이 발전 되면서 현재 인증체계가 만들어졌구나를 이해 할수 있어서

뜻깊은 시간이였다. 

 

아무튼 그래서 우리가 안전하게 웹 사이트에서 x509와 같은 인증체계를 선택하여 사용하고 있는것 같다.

 

X.509 기술의 근간은 위와 같은 암호학에 있습니다.

그렇다면, X.509는 무엇인가 다음시간에 알아보자.