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 확인!
고려사항
- 공개키 암호 방식은 지수승 연산 등과 같은 계산시간을 많이 필요로 하며, 덧셈과 같은 고속처리가 가능한 연산을 사용한 대칭키 방식에 비하여, 처리속도가 느린 단점이 있다. 따라서 대부분의 경우, 데이터 전송 시 공개키 방식보다는 대칭키를 사용하는 공유 비밀키 방식을 사용한다.
- 그렇다면 이 공개키 방식은 언제 사용되는가? 통신 쌍방이 암호화시 사용할 대칭키를 안전하게 분배할 때 주로 사용되여, 이 분배과정을 키 분배 방식이라고 한다. 이런한 키 분배 방식으로는 다음과 같은 방법이 있다.
- Arami 가 공유 비밀키를 선택하여 off-line으로 Borami에게 전달.
- Diffie-Helman 공유 비밀키 분배 방법.
- RSA 공개키 방식을 이용한 공유 비밀키 분배 방법.
- 키 분배센터(KDC) 방법을 이용한 공유 비밀키 분배 방법.
비대칭키로도 암호화 통신을 할 수 있겠지만 비대칭키 방식은 많은 컴퓨터 파워를 소모하기때문에, 실제로 데이터를 주고받을 때에는 대칭키를 사용하여 암호화를 진행합니다. 그러면 대칭키를 서버와 클라이언트 모두 가지고 있어야 할텐데요.
따라서 통상적으로 이러한 방법을 사용합니다.
- 클라이언트는 주고받은 랜덤데이터를 조합하여 **PMS(Pre Master Secret)**이라는 일종의 난수값 생성
- 서버의 인증서 안에 들어있는 서버 공개키로 암호화해서 서버로 전송
- 서버/클라이언트는 PMS, Client 난수, Server 난수 세가지 값을 바탕으로 대칭키 생성
- 이 대칭키를 사용해 암호화 통신 시작
→ 이러한 기법은 노출되면 위험한 대칭키를 외부망에 노출시키지 않음으로써 안전하게 통신할 수 있다는 장점이 있습니다.
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로부터 내려 받는 과정의 예는 다음과 같다.
- 이러한 KDC를 이용하면 단말간 세션키는 KDC에서 생성해 주기 때문에, 단말들은 오직 자신의 KDC에 등록한 마스터키만 보관하고 있으면 된다.
- 그리고 단말간 연결시 필요한 세션키는 KDC로부터 할당받아 사용하고 사용 후에는 세션키를 파기한다.
- 따라서 KDC를 사용하지 않고 단말들이 직접 키를 분배하는 경우에 비하여, 각 단말들은 키 생성 및 관리에 대한 부담을 경감할 수 있는 장점이 있다.
암호학 내용을 명확히 100% 이해 하지 못하더라도 시간날때마다 우리 스터디를 통해 들여다 보는 기회가 되어서
이러한 제약들이 있어서 점차 웹사이트의 인증체계등이 발전 되면서 현재 인증체계가 만들어졌구나를 이해 할수 있어서
뜻깊은 시간이였다.
아무튼 그래서 우리가 안전하게 웹 사이트에서 x509와 같은 인증체계를 선택하여 사용하고 있는것 같다.
X.509 기술의 근간은 위와 같은 암호학에 있습니다.
그렇다면, X.509는 무엇인가 다음시간에 알아보자.
'DevOps' 카테고리의 다른 글
[AWS EKS] (18) EKS 스터디 6주차 ( EKS 인증/인가 ) (0) | 2025.03.15 |
---|---|
[AWS EKS] (17) EKS 스터디 6주차 ( X.509 ) (0) | 2025.03.15 |
[AWS EKS] (15) EKS 스터디 5주차 ( Karpenter ) (0) | 2025.03.09 |
[AWS EKS] (15) EKS 스터디 5주차 ( CAS ) (0) | 2025.03.08 |
[AWS EKS] (14) EKS 스터디 5주차 ( HPA / VPA ) (0) | 2025.03.06 |