티스토리 뷰
1. 암호화는 Confidentiality를 보장하기 위해서 사용한다.
1-1 암호화 된 값은 원래 원문의 정보를 가지고 있어야 하기 때문에 원문보다 작을 수 없다.
1-2 보통 plain text는 평문이라고 하는데, cipher text는 한국말로 뭐라고 할지 애매하다. 암호문이라고 하겠다.
2. 암호화에 키를 사용하는 이유
2-1 일반적인 암호화 알고리즘은 단순한 함수형식으로 표현되기 때문에 해시처럼 암호문이 같아져 확장성이 떨어진다.
2-1-1 이 말은 보안성이 떨어질 수 밖에 없고, 표준 알고리즘을 사용하면 모두 같은 결과만 나오게 된다.
2-2 각 사용자마다 다른 암호문의 결과를 얻기 위해서 도입한 개념이 키이다. 각 다른 키는 각 다른 암호문을 만들어 낸다.
2-2-1 키는 랜덤하게 만들어지는 문자열정보라고 생각할 수 있다. 이 문자열을 가지고 특정한 알고리즘을 적용하면 각기 다른 암호문을 얻게 된다.
2-2-2 키를 사용하는 알고리즘을 Key Based Encryption 라고 하는데 이 키 때문에 표준으로 알고리즘이 지정되어도 확장성있는 암호화가 가능하다. 일반적인 함수 형식의 암호화에서 한층 진보된 형식이다.
2-2-3 수학적으로 복잡한 이론에 의해 만들어져 나같은 개발자들은 깊이 알필요도 없다.
3. 키 기반 암호화에는 두 가지 종류가 있다.
3-1 대칭키 암호화 (Symmetic Encryption) - DES, RC4 -> 안전하지 않음 / 3DES / AES, ChaCha20 -> 안전하다.
3-1-1 암호화하는데 사용하는 키와 복호화하는데 사용하는 키가 동일하다.
3-1-2 하나의 암호화 키를 사용하기 때문에 암호화 시에는 알고리즘 적용이 순방향이면 복호화시에는 역방향으로 적용된다. 따라서 암호화하는 방법이 간단하고 암호문의 크기가 평문과 거의 동일하다.
3-1-3 수학적 계산이 단순하기 때문에 대용량의 데이터를 암호화하여 전송하는데 사용된다. 대용량 데이터를 암호화하면 거의 같은 길이의 암호문이 나오기 때문에 데이터의 용량이 작다.
3-1-4 알고리즘의 단순성으로 암호화, 복호화에 리소스 사용이 비대칭키 방식에 비해 훨씬 적다.
3-2 비대칭키 암호화 (Asymmetic Encryption) - DSA (덜 안전한 알고리즘), RSA, Diffie-Hellman, ECDSA, ECDH 등
3-2-0 비대칭키 암호화 핵심 용도는 암호화, 서명, 키교환이다. 대칭키의 다양한 알고리즘은 이 세 가지 기능을 구현한다.
3-2-1 이 암호화 방식은 두개의 키를 생성한다. 각 키를 공개키, 비밀키로 지정해서 사용한다.
3-2-2 수학적으로 연관된 두개의 키를 생성하고 특정한 그 두개의 키로 만 서로 암호화, 복호화 된다. 이런 복잡한 이론은 나같은 일반인은 이해할려고 애쓰지 않는 게 낫다. 이런 게 가능하다는 게 그냥 신기할 뿐이다.
3-2-4 이런 기적같은 걸하는데, 당연히 키생성과 암호와에 많은 양의 연산이 필요하다
3-2-5 평문을 암호키의 데이터와 함께 알고리즘에 넣으면 수학적인 계산에 의해 결과가 증폭된다. 그래서 암호문 데이터가 클 수 밖에 없다.
3-2-6 대칭키는 암호화 시 키를 정방향으로 알고리즘을 적용, 복호화 시 역방향으로 키를 적용하는데, 비대칭키 방식은 무조건 한 쪽 방향이다. 즉 정방향으로 공개키를 적용해서 만든 암호문은 비밀키를 정방향으로 적용하면 다시 평문이 된다.
3-2-7 RSA 알고리즘에서는 어떤 것을 공개키로 할지 비밀키로 할지 정하는 의미는 크지 않다. 이런 양방향 성질을 가지는 키를 Commutative Keys 라고 한다. 암호화, 복호화 모두 같은 방향으로 적용되기 때문에, 어떤 키로 암호화를 해도 다른 키로 복호화를 할 수 있다.
3-2-7-0 RSA 알고리즘을 기준으로 설명한다. Diffie-Hellman, DSA는 Commutative Keys 알고리즘이 아니다.
3-2-7-1 비밀키 암호화 -> 공개키 복호화를 보통 서명(Signiture)이라고 말하고 (Authentication) - 메시지 미변조 및 인증
3-2-7-2 공개키 암호화 -> 비밀키 복호화를 암호화(Encryption), 보안 이라고 한다. (Confidentiality) - 특정인만 접근가능
3-2-7 서명
3-2-7-1 서명은 송신인이 데이터를 비밀키로 암호화해서 보내고 수신인이 송인인의 공개키로 복호화해서 확인한다.
3-2-7-2 데이터가 큰 경우는 비효율적이므로 일반적으로는 메시지를 해싱하여 얻은 정보를 비밀키로 암호화하여 메시지와 암호화된 해시를 같이 보내는 방식으로 리소스를 효율화 할 수 있다. 수신인은 송신인의 공개키로 암호화된 해싱을 복호화하고 그 복호환된 해싱과 자신이 메시지로 해싱한 값이 맞는지 확인한다.
3-2-7-3 이렇게 하면 메시지가 수정되지 않았다는 것(Integrity)와 보낸사람이 특정인이 맞는지(Authentication)를 보증할 수 있다.
3-2-8 키교환 알고리즘 (Diffie-Hellman, ECDHE -> Eliptic Curve Diffie-Hellman Exchange)
3-2-8-1 이 알고리즘은 사실 키 생성에 대한 것보다는 키 교환을 위한 알고리즘이다.
3-2-8-2 두 종단 간에 공유되는 비밀키를 생성하기 위한 알고리즘으로 비대칭키 알고리즘을 사용한다.
3-2-8-2-1 DH는 Discret Logrithm 을 사용하여 정방향 계산은 쉽지만 역방향 계산이 어려운 특징을 활용한다.
3-2-8-2-2 ECHDE는 Eliptic Curve Discret Logarithm 문제의 역방향 계산을 어려움을 활용한다. EC를 사용한다는 점만 다르다.
3-2-8-3 이 알고리즘은 비대칭키 알고리즘이 제공하는 암호화, 서명, 키교환에서 키교환의 기능만 제공한다.
3-2-9 서명 알고리즘 (DSA, ECDSA)
3-2-9-1 이름에서도 알 수 있듯 비대칭키 알고리즘으로 서명을 구현한다.
3-2-9-2 결과적으로 서명의 생성과 그 서명의 진위를 판별하는 기능만 가지고 있어 암호화나 키교환의 기능을 가지고 있지 않다.
4. 대칭키 장점, 단점
4-1 암, 복호화가 빠르고 리소스 사용이 적다.
4-2 평문과 거의 같은 길이의 암호문을 얻을 수 있다.
4-3 키를 양쪽에서 공유해야 하기 때문에 보안에 덜 안전하다.
4-4 주로 데이터 교환에 사용된다.
5. 비대칭키 장점, 단점
5-1 느리고, 리소스 소모가 크다.
5-2 암호문이 길다.
5-3 비밀키는 절대 공유하지 않으므로 안전하다.
5-4 작은 데이터를 안전하게 교환하는데 사용한다. 보통 대칭키 교환에 사용한다.
5-4-1 상대의 공개키로 대칭키를 암호화하여 보내면 받는 공개키의 주인은 비밀키로 대칭키를 복호화 할 수 있다.
'기록' 카테고리의 다른 글
AWS : Beanstalk ALB access log 생성 문제 (0) | 2023.03.28 |
---|---|
1 warning(s): 1285 mysql is started in --skip-name-resolve mode; (0) | 2023.03.12 |
Hashing - 해싱과 MAC (Message Authentication Code) (0) | 2023.02.10 |
Linux : Destop GUI가 실행되지 않을 때 (1) | 2023.02.05 |
AWS : private subnet 서버 접근 2 - Session Manager 사용 (0) | 2023.01.29 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- spring boot
- 외부파일
- 설정하기
- Security
- 스프링부트
- Spring
- 설정
- hibernate
- WebMvc
- 하이버네이트
- one-to-many
- 매핑
- Many-To-Many
- login
- 스프링
- Rest
- mapping
- 자바
- form
- XML
- crud
- Angular
- Validation
- MYSQL
- one-to-one
- jsp
- 상속
- Spring Security
- 로그인
- RestTemplate