실행 환경 : Google Colab, Jupyter Notebook
프레임워크 : tensorflow2
서울시립대학교 대학 혁신 지원 사업 - 학생 미래 설계 학기 자기주도 연구 프로젝트
주제 : 이미지 암호화에 대한 딥러닝 학습 및 판별
대칭키 암호의 경우, 마스터키 기준 암호화 키와 복호화 키가 동일하다. 또한 블록 암호의 경우, 블록 별로 암호화를 진행하기 때문에 이미지 암호화의 경우 육안으로 어느정도 어떤 모드를 사용했는지 구분이 가능하다. 이를 딥러닝을 활용하여 판별하는 프로젝트를 진행한다.
디렉토리 | 파일 | 설명 |
---|---|---|
data_making | crawling.ipynb | 데이터셋을 위한 이미지 크롤링 |
img_data_making.ipynb | 크롤링한 자료 type, shape 일치시키기 | |
img_encrypt.ipynb | 이미지 데이터 암호화 (AES128, ECB, CBC, OFB 모드) (1000장) | |
img_data_pickle | 원본 256 * 256 pixel 1000장을 128 * 128 pixel 값으로 만든 pickle | |
des_encrypt_img.ipynb | 이미지 데이터 암호화 (single DES, ECB, CBC, OFB 모드) (1000장) | |
128pixel_model | 128 modle test.ipynb | 128 픽셀 ECB, CBC, OFB 데이터 모델 및 학습 파일 (AES128) |
cbc128.pickle, ecb128.pickle, ofb128.pickle | AES128, 128 * 128 pixel 이미지에 대한 pickle 값 (array, dtype=uint8) | |
AES, DES | aes, des block enc.ipynb | AES128, Single DES 블록별 암호화 알고리즘 구현 (블록만으로 구현했기 때문에 전체 평문에 대해서는 추가 구현 필요) (암호화 이미지 판별을 위한 것이기 때문에 복호화 알고리즘은 따로 구현하지 않았다.) |
des_128pixel_model | pickle (디렉토리) | Single DES를 이용해 원본 데이터 1000장 (128 *128 )을 ECB, CBC, OFB로 1round, 2round, 16round(full round) 암호화 한 이미지 파일 pickle |
des_16round_model.ipynb | DES의 16round ECB, CBC, OFB 모드에 대한 학습(모델은 AES128 학습 때와 동일) | |
des_1round_model.ipynb | strides 활용하여 DES의 라인을 더 잘 특정하여 학습할 수 있도록 수정, 2가지 모드 판별과 3가지 모드 판별 모델 구현 | |
des_2round_model.ipynb | 라인의 특징을 더 잘 파악하기 위한 kernel size 조절 및 pooling size 조절 |
- 처음에 암호화를 256 * 256 pixel에 맞춰 진행하여 AlexNet과 유사한 크기이므로 AlexNet과 유사하게 모델링을 계획
- 정확도가 55%를 넘지 못함 (유사 설계를 하다보니 적합하지 않은 모델링)
- kaggle의 개와 고양이 이미지 분류 모델과 유사한 모델링 계획
- ECB, CBC 구분 성공적 (95% 이상의 정확도)
- 256 * 256 보다 128 * 128 pixel에서 더 높은 정확도를 가져 pickle 파일 128pixel에 대해 저장
- CBC, OFB 구분 가능한지 실험
- 육안으로는 구분 불가능
- ECB, CBC 구분과 같은 모델 적용시 구분 불가 (정확도 50% 이하)
- 라운드 별 구분 불가능 확인
- 라운드 별로 육안으로 판별 가능에 대해 실험한 결과, AES는 구분 불가 판정
-
DES의 경우 AES와 마찬가지로 16라운드 모두 진행 시 ECB 외에는 구분 불가
-
DES의 경우 키를 활용한 연산이 라운드 함수 내에서 1번 작용하므로 라운드 별 구분이 어느 정도 가능할 것으로 예상
- ECB 모드의 경우 3라운드에서 16라운드의 결과값과 유사함을 확인
- 1라운드 : 암호화가 잘 이루어지지 않음, 2라운드 : 형태와 색상 유추 가능
- CBC 모드의 경우 2라운드에서 16라운드의 결과값과 유사함을 확인
- 1라운드 : 암호화는 어느 정도 이루어지지만, 완벽히는 이루어지지 않음
- OFB 모드의 경우 3라운드에서 16라운드의 결과값과 유사함을 확인
- 1라운드 : 암호화가 거의 이루어지지 않음. 2라운드 : ECB 1라운드와 유사한 정도의 암호화 또는 16라운드와 유사
-
AES128 실험 때와 동일한 모델로 학습 시 ECB, CBC 99%의 정확도로 구분, CBC와 OFB는 거의 구분하지 못함 (50% 정도)
- AES의 경우 4*4 bytes 블록으로 암호화, DES는 8bytes 블록으로 암호화 진행, AES는 이미지의 음영 변화가 심하거나, byte 단위로 색상 변경 시 ECB 모드여도 암호화가 이루어짐
- 반면 DES의 경우 8bytes 블록이 라인을 형성하기 때문에 ECB 모드의 암호화 이미지에서도 라인이 두드러짐. 이러한 특성 때문에 DES에서 더욱 깔끔한 학습 효과를 보이는 것으로 생각.
-
DES의 경우, 8bytes 블록이 라인을 형성함을 이용해 학습 모델 구현 시 strides를 활용해 라인의 특징을 더 잘 학습할 수 있도록 수정
- 1라운드 암호화 이미지의 경우 CBC와 ECB, OFB는 확연한 차이를 보인다. (정확도 99%) 또한 OFB의 경우, 기본 IV 만으로 Enc을 진행하기 때문에 라인이 생기는 것 외에는 암호화가 진행되지 않고, 원본 이미지를 그대로 가져간다. 이 때문에 ECB와 OFB 모드의 구분 또한 동일한 모델로 판별 시 99%의 정확도를 얻었다.
- ECB, CBC 모드 판별, CBC, OFB 모드 판별, ECB, OFB 모드 판별 모드 1라운드 암호화에서는 학습이 잘 이루어졌기에, 동일 학습 모델을 출력층만 수정하여 3가지 모드 판별 시 97%의 정확도를 얻었다.
-
2라운드 암호화 이미지의 경우 OFB 모드에서 전체 1000장 데이터 중 150여 장의 이미지만이 세로선의 특징을 가짐을 확인 (전수 조사) 그에 따라 기존 모델(des_1round_model.ipynb)에 적용 시 CBC, OFB 판별 시 50%의 정확도를 가짐.
- 새로운 모델 생성
- 기존 모델 (des_1round_model.ipynb)에서 kernel_size=(4,1), pool_size=(2,1), stride=(1,4) 로 조정하여정사각형 커널이 아닌, 세로 라인의 특징을 살리기 위한 직사각형 커널과 풀링을 적용.
- CBC, OFB 판별의 경우 60%~65% 정도의 정확성을 가짐
- 3가지 모드 모두 판별 시 (ECB, CBC, OFB) 75%~80% 정도의 정확성을 가짐
이번 자기주도연구 프로젝트 "이미지 암호화에 대한 딥러닝 학습 및 판별"을 3달간 마무리하였다. 3달 동안 온전히 집중한 것이 아니라, 학업과 다른 일들을 병행했기 때문에 아주 좋은 결과라고는 할 수 없지만, 주어진 시간 내에서 최선을 다했다.
딥러닝이라는 새로운 기술을 암호학에 접목한 논문도 크게 많이 없는 상황이었고, 딥러닝, 머신러닝 등을 공부한지 얼마 되지 않은 상태에서 시작한 프로젝트였지만, 개인적으로는 만족하는 결과이다.
이번 프로젝트를 통해 ECB 모드의 안전성의 취약함에 대해 다시 한 번 상기할 수 있었고, 딥러닝에 대한 전체적인 공부와 실제 적용을 통해 한 층 더 성장할 수 있는 기회였다.