암호(Cryptography) : 메시지를 해독 불가능한 상태로 변환(암호화), 암호화된 메시지(암호문)를 해독 가능한 형태로 변환(복호화)하는 기술
평문(Plaintext) : 해독 가능한 형태의 메시지
비밀키(Secret Key) 종류 : 암호화키(Encryption Key), 복호화키(Decryption Key)
대칭키 암호 : 암호화키와 복호화키가 같은 경우
배대칭키 암호(공개키 암호) : 암호화키와 복호화키가 서로 다른 경우
블록암호 : 메시지를 블록 단위로 나누어 처리
스트림 암호 : 메시지를 비트단위로 처리
HIGHT(HIGh security and light weigHT) : 저전력 경량화 컴퓨팅 환경에서 기밀성 제공을 위한 64bit 블록 암호 알고리즘
64bit의 암/복호화키를 이용하여, 임의의 길이를 가진 메시지를 64bit씩 블록단위로 나누어 암호화
1. 엔디안
컴퓨터 메모리에 바이트를 배열하는 순서
-> 바이트 배열이 맞지 않으면 같은 알고리즘을 사용하더라도 서로 다른 암호문이 나올 수 있음
빅 엔디안(큰 단위가 앞에 위치), 리틀 엔디안(작은 단위가 앞에 위치), 미들 엔디안(둘다 지원)
x86환경은 리틀 엔디안 구조를 사용함
2. 데이터 형식
암호문 비트열을 문자열 형태로 저장/처리 시 문제가 발생함
-> 암호화 메시지는 문자열이 아닌 HEX 형태로 처리가 필요
3. 운영모드
입력 블록들을 블록암호에 적용하여 암/복호화하는 방법 (ex. ESB, CBC, CFB, OFB, CTR)
- ECB(Electronic Codebook) : 평문 블록을 암호문 블록으로 독립적으로 암호화
암호화 과정 : 평문 블록 -> 암호화 == 암호문 블록
복호화 과정 : 암호문 블록 -> 복호화 == 평문 블록
-> 가장 기본적인 방식으로, 모든 블록이 같은 암호화 키를 사용하기 때문에 보안에 취약함
- CBC(Cipher Block Chaining) : 동일한 평문/암호문 블록 쌍이 생기지 않도록, 전 단계의 암/복호화 결과가 현 단계에 영향
병렬화 가능함
암호화 과정 : 현 단계 평문 블록과 전 단계 암호 블록을 XOR(베타적 논리합)연산 -> 암호화 == 암호문 블록
복호화 과정 : 현 단계 암호문 블록을 복호화 -> 복호화된 블록과 전 단계의 암호문 불록을 베타적 논리합 == 평문 블록
- CTR(CounTeR) : 블록 암호를 스트림 암호로 바꾸는 구조
각 단계에 증가되는 카운트 블록을 nonce와 결합하여 블록 암호의 입력으로 사용함
암호화 과정 : 카운터를 암호화한 블록과 평문 블록을 베타적 논리합 == 암호문 블록
복호화 과정 : 카운터를 암호화한 블록과 암호문 블록을 베타적 논리합 == 평문 블록
- CMAC : CBC-MAC을 안정성 측면에서 개선
??????????
4. 패딩 방법
메시지를 64bit 블록으로 나눌 때 마지막 블록에 부족한 bit를 채우는 방법
ECB, CBC 모드 등은 평문 블록이 암호화의 입력으로 사용되므로 패딩 작업이 필요함
- 방법 1
마지막 평문 블록에 00을 덧붙임
- 방법 2
마지막 평문 블록이 64bit가 되도록 데이터 끝에 '80' 작성 후 나머지를 '00'으로 채움
만약 원래 마지막 평문 블록이 64bit라면 새로운 블록을 생성하고 '80', '00'을 덧붙임
- 방법 3
덧붙이기 필요한 바이트 수를 작성하여 덧붙임
원래 마지막 평문 블록이 64bit라면 '08'로 이루어진 블록을 추가로 생성
[Tkinter] 유튜브 다운로드 프로그램 (미니 프로젝트) (0) | 2022.08.17 |
---|---|
[Web] 게시판 조회(검색, 정렬) 기능에 GET 방식을 사용하는 이유 (0) | 2021.07.21 |
[Docker] 도커 설치 방법 / 에러 해결 방법 정리 (0) | 2021.07.13 |
[Docker] 도커 개념 정리 (0) | 2021.07.12 |