본문 바로가기

Spring Security

[Spring Security] 보안 알고리즘

서버의 Security를 이해하려면 기초적인 보안 알고리즘을 아는 것은 필수입니다!

 

정보보안의 3요소

기밀성 (Confidentiality)

정보를 오직 인가된 사용자에게 허가합니다.

ex) Snopping, 해킹에 의한 내부정보 노출

 

 

무결성 (Integrity)

비정상적인 변경이나 파기없이 완전하게 보존합니다.

ex) 악성코드로 인한 파일 회손

 

 

가용성 (Availablity)

권한이 있는 사용자가 원할 때 바로 접근과 사용합니다.

ex) DOS, DDOS로 인한 서비스 불능

 

대칭암호

암호화를 할 때 사용하는 키와 복호화를 할 때 사용하는 키가 동일한 암호 알고리즘입니다.

특정 키를 통해 단순한 방법부터 복잡한 방법까지 잘 활용해가며 평문을 변화시키는 것이라 이해하면 좋습니다.

 

예를들어 가장 단순한 방법인 시저암호는 임의의 수 K를 정해 소문자 알파벳들을 K만큼 평행이동 시킨 후 대문자로 변환합니다. K = 3 이라면 age라는 단어는 DKI가 되는 것이죠. 하지만 이렇게 언뜻봐도 단순한 알고리즘은 전사공격에 의해 쉽게 무너집니다.

 

Brute Force Attack이라는 표현으로도 쓰이는 전사공격이란 무차별적으로 암호 대입을 하여 암호를 풀어내는 방식인데요. 알파벳과같은 경우 모음(a, e, i, o, u)와 같이 많이 쓰이는 알파벳의 빈도를 분석하여 전사공격을 하게된다면 더욱 풀어내기 쉬워집니다. 따라서 복잡한 대칭암호가 필요했습니다.

 

비교적 복잡한 대칭암호 방법중 유명한 알고리즘인 DES가 있습니다. 이는 Data Encryption Standard라는 약자로 이름에서 알 수 있다싶이 굉장히 오랜기간 사용되었던 표준 암호 알고리즘입니다. 암호화하고 싶은 데이터(평문)을 페이스텔 네트워크에 원하는 라운드 만큼 통과시켜 암호문을 만드는 방식입니다. 하지만 이는 차분 해독법선형 해독법같은 방법이 나오며 무너지게됩니다. 

 

차분 해독법이란 평문의 일부를 변경할 때 암호문이 어떻게 변화하는지 관찰하며 조사하는 해독법을 말합니다.

선형 해독법이란 평문과 암호문 비트를 몇개 정도 XOR 하여 0이되는 확률을 조사하는 해독법입니다.

즉, 이 2가지를 통해 공격자는 Brute Force Attack이 아닌 Chosen Plaintext Attack을 할 수 있어집니다.

 

따라서 차분 해독법과 선형 해독법으로도 안전한 AES라는 알고리즘이 나오게 됩니다. 또한 DES를 3단으로 겹치게하여 Triple DES의 약자인 TES라 나오게됩니다. 이들을 모두 여기서 다루기엔 글이 정말 길어지니 자세한내용은 AESTES를 검색하여 공부해보시길 추천드립니다.

 

이 글에서 중요한점은 대칭암호란 어떻게 동작하는지 이해하는 것입니다. 어떨때는 전사공격을 피해 복잡한 네트워크를 구성하기도하고, 어떨때는 차분 해독법이나 선형 해독법을 피하기 위해 Key를 여러개 쓰거나 Box 형태의 치환 표준을 만들어 예측이 불가능하게도하고, 어떨때는 행이나 열을 섞기도합니다. 하지만 이 글을 보는 눈치가 빠른 분들은 암호화된 암호문이라도 시간이 지난다면 언젠가 풀린다는걸 눈치 채셨을겁니다. 따라서 단순히 복잡하고 표준이되는 암호 알고리즘을 사용했다 하더라도 완전히 보안이 되었다라고 생각하지 않으셔야됩니다.

 

 

비대칭 암호

공개키 암호라고도 불리는 비대칭 암호는 Public KeyPrivate Key라는 비 대칭 키로 암/복호화를 하는 것입니다.

먼저 이해를 하기위해 두가지 수식을 보겠습니다.

 

17 mod 3 = A

B mod 3 = 2

 

위의 수식의 A와 B중 어떤것이 알아내기 쉬울까요? 당연히 A입니다. 반대로 B는 답이 무한개가 됩니다. 

이처럼 A를 구할 땐 시간이 별로 안들지만 B를 구할 땐 시간이 기하학적으로 많이 드는 성질을 이용해 키를 만드는 방식이 RSA입니다.

RSA도 위의 대칭 암호에서 배운것 같이 거창한 것을 하는게 아닙니다. 특정 소수를 골라 이리저리 더하고 최소공배수와 최대공약수를 구해 Public Key, Private Key를 구하는 방식입니다.

실제로 RSA를 직접해보시면

 

Public Key = (5, 323)

Private Key = (29, 323)

 

이런 식의 숫자 형태를 띄게 될 겁니다.

이것을 이용해 암호화는 (평문)^5 mod 323 = (암호문)

복호화는 (암호문)^29 mod 323 = (평문) 을 하면됩니다.

 

하지만 이렇게 완벽한 공개키 암호에도 문제가 존재합니다. 바로 상대방의 공개키를 신뢰 할 수 없는 것인데요. A에게 무언가를 암호화해서 보내고싶어 A의 공개키를 가지고 암호화하여 보냅니다. 근데 여기서 A의 공개키라고 생각했던 키가 악의적인 사용자 B의 공개키면 어떻게 될까요?

A는 정보를 받지도 못할뿐더러 B가 정보를 받을 수 있게 됩니다. 이처럼 공개키 신뢰의 문제가 있습니다.

 

키 배송 문제

대칭 암호를 사용하려면 송/수신자 간 공유하는 Key가 있어야합니다. 이 Key를 보내는 과정에서 안전하게 네트워크 상에서 보내는 방법에대한 이야기입니다.

 

키 사전 공유에 의한 해결

이 방법은 가장 안전하지만 실제로 직접 만나 전달해야하니 편의성은 제일 떨어집니다.

 

Diffie-Hellman

키 배송 문제에 해결책으로 가장 유명한 방법입니다. 이는 이산로그문제에 기반하여 안전성을 찾은 방법입니다.

하지만 중간자 공격에 약하다는 단점을 가지고 있습니다.

 

하이브리드 암호 시스템

공개 키 암호는 한가지 크나큰 단점을 가지고 있는데요. 이는 처리 속도가 대칭 키 암호에 비해 훨씬 느리다는 것입니다.

따라서 대칭 키와 비 대칭키 알고리즘을 같이 사용하려합니다.

메시지의 기밀성은 고속의 대칭 암호가 처리하고, 대칭 암호의 기밀성은 공개 키 암호가 처리합니다.

ex) SSL/TLS, PGP

 

일 방향 해시 함수

해시함수의 목적은 무결성을 지키는 것인데요. 아까 비 대칭 암호에서 배웠던 암호화를 하는데는 시간이 적게들지만 복호화를 하는데는 시간이 기하학적으로 오래걸린다는 점에서 만들어진 함수입니다.

 

해시 함수의 특징으로는 다음과 같습니다.

1. 임의의 길이 메시지로부터 고정 길이의 해시 값을 계산한다.

2. 해시 값을 고속으로 계산한다.

3. 메시지가 조금이라도 다르면 해시 값은 완전히 다르다.

4. 일방향성을 갖는다.

 

이러한 특징을 가진 해시 함수는 블록체인이나 각종 보안알고리즘에 사용이됩니다.

예시로는 SHA-0 부터 시작해 계속 발전하여 SHA-3까지 현재 사용되고 있고, 이 외에도 MD-5, RIPEMD-160등 다양한 함수가 존재합니다.

 

메시지 인증 코드

RFC2104로 발표된 MAC 기술의 일종으로 해시함수의 고유한 특성을 이용해 메시지의 무결성과 기밀성을 제공하는 기술입니다.
송신자와 수신자는 특정 세션을 통하여 Secret Key라는 key를 가지고 있어야합니다. (따라서 대칭키 기반 암호화 알고리즘이라 부를 수 있습니다.)


1. 송신자는 Key를 사용하여 원본메시지를 해싱합니다. 그것을 H(P + Key)라고 부르겠습니다.
2. 송신자는 H(P + Key)와 원본메시지를 수신자에게 전달합니다.
3. 수신자는 Key를 사용해 원본메시지를 해싱하고, H(P + Key)와 비교합니다.
4. 동일한 값이라면 원본 메시지는 변조되지 않았고, 신뢰할 수 있는 값으로 판단합니다.

 

이를 통해 무결성과 기밀성을 지키는 기술입니다. 하지만 재전송 공격에 약하다는 단점이 있습니다. 

물론 Nonce, TimeStamp등 다양한 방법으로 재전송 공격을 막을 수 있습니다.

 

디지털 서명

네트워크 상에서 누군가에게 중요한 메시지를 받았습니다. 하지만 이게 정말 내가 원하는 그 누군가에게서 온 메시지가 맞을까요? 그것을 판단하는 기준은 무엇이죠?

이를 위해 서명이라는 개념이 등장했습니다.

 

이는 비 대칭 암호키를 이용한 기술인데, 본인의 Private Key를 이용해 특정 평문을 암호화하고, 신뢰를 받고싶은 수신자에게 보냅니다. 그럼 수신자가 이 암호문을 Public Key로 복호화하여 신뢰를 확인합니다.

이것이 가능한 이유는 다른이들은 나의 Private Key를 모른다는 점 때문입니다. 제 3자가 자신의 Private Key로 암호화해서 보낸다면 맞지도 않는 Public Key로 복호화한들 복호화가 되지 않기 때문입니다.

 

따라서 이 기술을 통해 사용자는 부인방지신뢰성을 가져갈 수 있습니다.

(논문에선 Private Key로 암호화하는 것을 복호화라하고, Public Key로 복호화하는 것을 암호화라 많이 표현합니다. 관련 논문을 찾아보고 싶으시다면 유의해주세요.)

 

PKI

비 대칭 암호 알고리즘을 배울 때 다른이의 공개키의 신뢰에대해 문제가 있었죠? 이를 해결하기 위해 나온 구조가 PKI입니다. PKI는 일반적으로 CARA로 구성됩니다.

 

CA는 인증서의 관리를 행하는 기관으로 키 쌍을 작성하고, 공개 키 등록 때 본인을 인증하며, 인증서를 작성해서 발행하고 추후 폐지하는 역할도 수행합니다.

RA는 인증기관의 일 중 공개 키의 등록과 본인에 대한 인증을 대행하는 기관입니다.

 

 

 

'Spring Security' 카테고리의 다른 글

[Spring Security] OAuth  (0) 2023.02.13
[Spring Security] Cors  (0) 2023.01.15
[Spring Security] Security Session  (0) 2023.01.15