오늘의 취준/오늘의 공부

비대칭키 암호화, 대칭키 암호화

gogoem 2023. 9. 16. 04:09
728x90

2023.09.16

 

질문 참고 : https://github.com/ksundong/backend-interview-question

 

GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질

백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) - GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문,

github.com

 

 

비대칭키 암호화

공개키 암호라고도 한다.

암호화에 공개 키를, 복호화에 비밀 키를 사용하는 알고리즘이며, 수학적인 난제를 기반으로 설계되어 있고 암복호화에 복잡한 수학 연산을 사용하기 때문에 대칭키 암호화에 비해 효율이 떨어질 수 있음.

공개키는 다른 사용자들과 공유되는 개방된 키. 암호화에만 사용되며 복호화에는 사용되지 않음.

비밀키는 개인이 소유하는 키. 복호화에 사용됨. 공개키와 쌍을 이루며 소유자만 알고 있어야 함.

여러 송신자가 하나의 공개키로 암호화를 수행하기 때문에 사용자가 많더라도 키 관리가 용이함.

복잡하며 느리기 때문에 작은 양의 데이터 또는 키 교환에 사용됨.

데이터 기밀성 보호의 대표적 알고리즘으로 RSA(Rivest-Shamir-Adleman), ElGamal, ECC가 있음.

 

  • RSA
    • Rivest-Shamir-Adleman의 약자. 각각 Ron Rivest, Adi Shamir, Leonard Adleman개발자의 이름에서 따 옴.
    •  강력한 보안을 제공함. 키의 길이를 증가시킬수록 높은 수준의 보안이 유지됨.
    • 전자 서명을 생성하고 검증하는데에도 사용 가능.
    • 알고리즘 작동 순서
      1. 키 생성 : 사용자가 공개키와 개인키 쌍을 생성. 공개키는 두개의 매우 큰 소수(p, q)와 공개 지수(e)로 구성되고 개인키는 두 소수(p, q)와 개인 지수(d)로 구성됨.
      2. 암호화 : 암호문 = 메세지^e mod (p*q)
      3. 복호화 : 평문 = 암호문^d mod (p*q)
      4. 전자서명 : 개인키를 사용해 메세지를 서명하고 공개키를 이용하여 서명을 확인. 메세지의 무결성과 인증 가능.
  • ElGamal
    • Taher ElGamal 개발
    • 주로 기밀성을 유지하고 데이터를 안전하게 교환하는 데에 사용됨.
    • 전자 서명을 생성하고 검증하는데에도 사용 가능.
    • 알고리즘 작동 순서
      1. 키 생성 : 사용자가 공개키와 개인키 쌍을 생성. 공개키는 큰 소수(p)와 그 소수의 원시 제곱근(g)를 포함
      2. 암호화 : 
  • ECC
    •  

 

 

송신자를 인증(전자서명)하는 데에도 사용될 수 있음.

전자 서명이란 인터넷 상에서 사용자가 본인임을 증명하기 위해 서명을 하는 수단.

공개키 암호를 거꾸로 사용하는 방식임.

개인키를 소유한 사람이 전자 서명 알고리즘을 통해 평문에 대한 서명 값을 생성하고 그 값에 대해 공개키를 이용하면 평문을 검증할 수 있는 원리.

전자서명의 대표적 알고리즘으로 DSA(Digital Signature Algorithm), RSA Signature, ECDSA(Elliptic Curve Digital Signature Algorithm)등이 있음.

 

 

 

대칭키 암호화

암호화, 복호화에 동일한 키를 사용하는 암호화 기술.

내부 구조가 간단한 치환과 전치의 조합으로 되어 있어 연산 속도가 빠르다.

하지만 송/수신자 간 동일한 키를 공유해야 하므로 많은 사람들과 정보 교환을 해야 한다면 관리해야 할 키의 수가 많아지는 어려움이 있을 수 있다.

속도가 빠르고 효율적이기 때문에 대량의 데이터를 빠르게 암호화, 복호화 할 때 적합하다.

 

대칭키 암호의 유형에는 대표적으로 블록 암호와 스트림 암호가 있음.

블록 암호 평문을 고정된 크기의 블록 단위로 암호화, 복호화를 수행하며 각 블록마다 동일한 키가 사용된다.
고정된 크기로 평문을 맞추기 위해 패딩(Padding) 기법을 이용한다.
하나의 키로 여러 블록을 안전하게 처리하기 위해 운용 방식(mode of operation)이라는 절차를 이용한다.
대표적 알고리즘 : AES, DES
스트림 암호 평문과 동일한 길이의 키스트림 수열을 생성해 평문과의 XOR연산을 통해 암호화, 복호화를 수행한다.
등기식 스트림 암호 : 키스트림 수열을 평문과 독립적으로 생성하는 경우
비등기식(자기등기식) 스트림 암호 : 평문이 키스트림 수열에 영향을 미치는 경우
구현 여건이 제약되는 환경에서 구현이 용의해 무선 통신 등의 환경에 주로 사용됨.
대표적 알고리즘 : RC4, A5/1, A5/2

그 외에도 모드를 선택해 암호화된 데이터를 보다 안전하게 처리할 수 있는 블록 암호 모드,

해시 함수를 사용하여 데이터를 암호화하고 데이터 무결성을 보호하는 암호 해싱,

데이터를 암호화하는 동시에 데이터 무결성을 검증하는 인증 암호화,

대칭키와 비대칭키를 결합하여 대칭키 암호화의 속도와 효율성, 비대칭키 암호화의 키 교환과 보안 기능을 제공하는 복합 대칭키 암호화 등이 있음.

 

 

 

 

 

 

*참조

https://seed.kisa.or.kr/kisa/intro/EgovDefinition.do

 

 

'오늘의 취준 > 오늘의 공부' 카테고리의 다른 글

SOLID원칙/의존성역전의 법칙  (0) 2023.09.17
MVC 패턴  (0) 2023.09.16
[Spring Boot] JPA 사용하기 / Spring Data JPA  (0) 2023.09.16
[Java] comparable 인터페이스  (0) 2023.08.12
[Java/Queue] 큐 사용하기  (0) 2023.08.09