프롤로그
대칭키 암호 - 스트림 구조
- 블록 구조
- 파이스텔 방식
- SPN
구조에서 파이스텔 방식에서
2024.01.18 - [보안 스터디/암호학] - [암호학] 암호화 해킹 #5 (3DES 및 구현)
DES 방식을 직접 구현해보았고
SPN 방식에서
2024.01.18 - [보안 스터디/암호학] - [암호학] 암호화 해킹 #6 (AES 및 구현)
AES 방식을 직접 구현해보았다.
이제 대칭키 암호에서 스트림 암호를 구현해볼 차례이다.
스트림 암호
이진화된 평문 스트림과 이진 키 스트림을 비트 단위로 XOR 연산하여 암호문을 생성하는 방식이다.
스트림 암호는 이를 위한 하드웨어 구현이 간편하고 속도가 빠르다는 점 때문에 무선통신 환경에서 무선 데이터 보호에 주로 사용된다.
ECB모드
블록암호 운영 모드 중에 하나인데, 운영모드는 조만간 다룰 것 같다.
ECB모드는 가장 단순한 블록암호 운영 모드이며, 각 블록들은 암호키를 이용해 독립적으로 암호화 된다. ECB 모드의 가장 큰 약점은 동일한 내용의 블록은 동일한 암호블록으로 암호화 된다.
+ 스트림 모드에도 블록암호라는 개념을 쓰는지는 나도 자세히는 모르겠음 ㅜ
스트림 암호 구현하기
우리가 구현해볼 것은 ARC4 라는 알고리즘이다. Alleged RC4를 의미한다.
스트림 암호는 보통 8비트 단위로 암호화를 수행하므로 암호 블록 크기는 1바이트이고, 운영모드로는 ECB 모드만 사용하므로 초기화 벡터는 따로 필요없다. 그러므로 암호키만 정의되면 1문자 이상의 임의의 메시지에 대해 암호화 복호화가 가능하다.
from Crypto.Cipher import ARC4
from Crypto.Hash import SHA256 as SHA256
class myARC4():
def __init__(self, keytext):
self.key = keytext.encode()
def enc(self, plaintext):
arc4 = ARC4.new(self.key)
encmsg = arc4.encrypt(plaintext.encode())
return encmsg
def dec(self, ciphertext):
arc4 = ARC4.new(self.key)
decmsg = arc4.decrypt(ciphertext)
return decmsg
def main():
keytext = "samsjang"
msg = 'python3x'
myCipher = myARC4(keytext)
ciphered = myCipher.enc(msg)
deciphered = myCipher.dec(ciphered)
print("Original : \t%s" % msg)
print("Ciphered : \t%s" % ciphered)
print("Deciphered : \t%s" % deciphered)
main()
실행결과
PS D:\github\cryp> & d:/github/cryp/myenv/Scripts/python.exe d:/github/cryp/chap02/ARC4.py
Original : python3x
Ciphered : b'E\xb9I+Z\x03>1'
Deciphered : b'python3x'
PS D:\github\cryp>
코드분석
AES나 DES에 비해 확실히 쉽긴 하다.
class myARC4():
def __init__(self, keytext):
self.key = keytext.encode()
.encode는 문자열을 바이트 단위로 변환하는 파이썬 문자열 메서드이다. 문자열은 유니코드 문자들이 시퀀스로 저장되는 반면, 바이트는 데이터를 이진형식으로 펴한한다.
나머지는 그냥 암호화 복호화 하는 함수기에 넘어가겠다.
에필로그
확실히 쉽긴 했다. 이부분은....
이제 AES와 DES를 활용해서 파일들을 불러오고 암복호화 하는 과정을 알아보고 이를 매트랩에서 실행하는 것을 해보자. 그건 카테고리 2024 winter-study 에서 작성하겠다.
운영모드도 조만간 할 것이다.
'보안 스터디 > 암호학' 카테고리의 다른 글
[암호학] 암호화 해킹 #8 (3DES와 AES를 이용하여 암호파일 저장) (0) | 2024.01.19 |
---|---|
[암호학] 암호화 해킹 #6 (AES 및 구현) (0) | 2024.01.18 |
[암호학] 암호화 해킹 #5 (3DES 및 구현) (1) | 2024.01.18 |
[암호학] 암호화 해킹 #4 (대칭키 암호, Symmetric-key Cryptography) (0) | 2024.01.17 |
[암호학] 암호화 해킹 #3 (전치 암호 도구 만들기) (5) | 2024.01.14 |