비트열 암호와 OTP
비트열 암호
부호화
암호화 프로그램을 통한 문자열(string)을 비트열(bit string)로 바꾸는것
고전암호 = 문자 암호 방식 (A -> T)
현대암호 = 비트열 암호 방식 (0x41 + 연산 = 0x75)
XOR
XOR(eXclusive OR) 배타적 논리합 두 수를 비교하여 같으면 0 다르면 1로 표기하는것
암복호화에 활용시 굉장히 빠른 속도로 암호화 및 복호화를 진행할 수 있다.
a = 60
b = 13
print(' a:', bin(a).rjust(10))
print(' xor b:', bin(b).rjust(10))
c = a ^ b #XOR (a XOR b)
print('a xor b:', bin(c).rjust(10))
print()
print(' c:', bin(c).rjust(10))
print(' xor b:', bin(b).rjust(10))
d = c ^ b
print('c xor b:', bin(d).rjust(10))
'''
a: 0b111100
xor b: 0b1101
a xor b: 0b110001
c: 0b110001
xor b: 0b1101
c xor b: 0b111100
'''
[참고] ASCII
ASCII는 7비트 인코딩으로, 33개의 출력 불가능한 제어문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 총 128개로 이루어진다.
출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수문자, 그리고 하나의 공백 문자로 이루어진다.
일회용 패드
일회용 패드 (One-Time Pad)
OTP, 전사 공격에서 키 공간을 모두 탐색하더라도 해독 할 수 없는 암호, 해킹이 불가능한 일회용암호로 반복해서 사용하면 안된다 불리나 크기가 너무 커서 실제로 활용하기는 어려운점이 있다.
일회용 암호(OTP) 특징
1) 암호화된 메시지와 정확하게 길이가 같아야 한다.
2) 임의의 심볼로 구성되어야 한다
3) 한번 사용한 후에는 어떠한 메시지에서도 다시 사용해서는 안된다.
대칭키 암호
대칭키알고리즘은 암호문 작성시 암호화하는 암호키와 복호화하는 암호키가 동일하다, 따라서 키의 유출이 되지 않도록 비밀키(Secret Key)라고 불리며 송신자와 수신자가 동일한 키를 가지고 사용해야한다고 해서 대칭키(Symmetric Key)라고 불린다.
외부 사용자들에게 노출되지 않아야 하는 암호키로 암호화하는 알고리즘을 비공개키 알고리즘이라고 한다.
DES & 3DES & AES
1. DES (Data Encryption Standard)
1977년 미국 연방 정보 처리 표준 규격으로 채택된 대칭 암호이다. 64bit(56bit key + 8bit parity)의 키를 적용하여 64bit의 평문을 64bit의 암호문으로 암호화 시키는 대칭형 블록 암호이다, 이때 16번의 반복 동안 라운드 함수를 통해 암호화 하고 이때 적용되는 키를 라운드 키라고 한다.
대체와 치환을 통해 암호화 진행하는 방식이고, 전사공격으로 해독할수 있는 수준의 암호. 현재는 취약한 암호로 사용되지않는다.
[참고] 블록 암호(Block Cipher), 스트림 암호(Stream Cipher)
블록 암호
블록단위로 처리를 하는 암호 알고리즘, 긴 bit의 평문을 암호화 하기 위해 평문을 64bit 단위의 블록으로 나누고 각각 나누어진 블록들을 DES로 암호화 진행한다.
예시 ) DES, 3DES, AES 등
스트림 암호
한번에 1bit or 1byte 단위의 데이터 스트림을 암호화 하는 방식, 평문과 동일한 길이의 키스트림(key stream) 수열을 생성, 평문과의 XOR연산을 통해 암 복호화를 수행한다.구현 여건이 제약되는 환경에서 구현이 용이하며, 무선통신등의 환경에서 주로 활용된다.
예시) ARC4, ChaCha시리즈, Salsa20 등
[참고] 파이스텔(Feistel) 암호 방식 | 혼돈(Confusion)과 확산(Diffusion)
혼돈(Confusion)
키를 발견하기 어렵게 하기 위해 암호문에 대한 통계 값과 암호 키 값 사이에 관계를, 복잡하게 하는 것
확산(Diffusion)
평문의 통계적 구조가 암호문의 광범위한 통계값에 분산, 키를 추론하기 어렵게 하기 위해 평문과 암호문 사이에 통계적인 관계를 가능한, 복잡하게 만드는 것
2. 3DES (Triple Data Encryption Standard)
컴퓨터의 고도화에 의한 DES의 취약점을 개선하고자 고안된 암호화 알고리즘, DES를 총 3번에 걸쳐서 진행하는 블록암호화 방식, 단 3번의 DES 과정에 사용되는 키는 모두 서로 다른 키를 활용하여 암호화를 진행한다. 3번의 DES 과정을 거침으로 속도가 빠른편은 아니다.
현재도 은행등에서 아직 사용되고 있는 암호화 방식이나 DES가 전사공격으로 취약하듯 기초기반은 DES임으로 전사공격의 시간을 늦추는것 뿐 안정적이지 않음.
[참고] 한국의 국산 암호기술
SEED (Feistel 구조) https://seed.kisa.or.kr/kisa/algorithm/EgovSeedInfo.do
ARIA (SPN 구조) https://seed.kisa.or.kr/kisa/algorithm/EgovAriaInfo.do
3. AES (Advanced Encryption Standard)
AES는 하나의 알고리즘이 아닌 NIST에서 DES를 대체할 수 있는 공모 경쟁방식에 의해서 1,2차 심사과정을 통해 결정된 5개의 암호화 알고리즘 중 하나를 사용하는 경우를 AES 암호화 알고리즘이라고 한다.
NIST 공모 경쟁 2차 심사 통과
MARS : IBM RC6 : RSA Rijndael : Daemen, Rijmen Serpent : Anderson, Biham, Knudsen Twofish : Counterpane
Rijndael
AES 에 채택된 블록 알고리즘, 128bit or 192bit, 256bit 길이의 키를 활용하며, SPN(Confusion + Diffusion) 구조로 되어있는 암호이다. 10~14의 복수 라운드로 구성되어있으며 현대까지도 활용되는 AES 암호중 하나이다.
AES 의 경우 DES 보다 복잡하고 고도화된 알고리즘을 활용함으로 현재까지 안전하게 활용되는 암호들이다, Rjindeal의 경우도 아직 수학적인 조작에 의해 풀리지 않아 유효한 공격이 발견되지 않았고, 준수한 속도 및 다양한 플랫폼에서 활용이 가능하다.
'모의해킹 침해대응 과정 > 본 과정' 카테고리의 다른 글
암호학 / 블록 암호 모드 구현(by python) (0) | 2021.06.23 |
---|---|
암호학 / 블록 암호 모드 (Block cipher mode) (0) | 2021.06.23 |
암호학 / 암호의 역사(고전 암호학) (0) | 2021.06.21 |
암호학 / 암호 개요 (0) | 2021.06.21 |
Hackme / day 49-51 (0) | 2021.06.03 |