AngelPlayer`s Diary

개념 정리

암호(Cryptography) : 메시지를 해독 불가능한 상태로 변환(암호화), 암호화된 메시지(암호문)를 해독 가능한 형태로 변환(복호화)하는 기술

평문(Plaintext) : 해독 가능한 형태의 메시지

 

비밀키(Secret Key) 종류 : 암호화키(Encryption Key), 복호화키(Decryption Key)

대칭키 암호 : 암호화키와 복호화키가 같은 경우

배대칭키 암호(공개키 암호) : 암호화키와 복호화키가 서로 다른 경우

블록암호 : 메시지를 블록 단위로 나누어 처리

스트림 암호 : 메시지를 비트단위로 처리

 

HIGHT(HIGh security and light weigHT) : 저전력 경량화 컴퓨팅 환경에서 기밀성 제공을 위한 64bit 블록 암호 알고리즘

64bit의 암/복호화키를 이용하여, 임의의 길이를 가진 메시지를 64bit씩 블록단위로 나누어 암호화

 

 

 

HIGHT 사용을 위한 고려 사항

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'로 이루어진 블록을 추가로 생성 

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band