간혹 다른 언어로 구현된 시스템과
암복호화된 데이터 송수신시 발생하는 문제에 대해
도움을 원하는 글이 올라오는데
참고하시라고 적어봅니다.
이기종 시스템간 암복호화 구현시
아래에서 나열한 조건을 확인하세요.
0. 알고리즘
DES3, SEED 같은 알고리즘 입니다.
비밀키는 보호되어야 합니다.
1. padding
평문을 특정 블럭단위로 (보통 16byte:128bit) 구분지어
암호화를 하는데
마지막 블럭이 16byte 가 안될경우
특정 기준으로 채워야 됩니다.
그때 사용하는 방법이 padding 이라는 건데
방법은 아래와 같으며
- 패딩되는 바이트의 수의 같은 값으로 모두 패딩 : PKCS7 패딩
- 0x80 패딩 후 0으로 패딩
- 0으로 패딩 후 마지막 바이트는 패딩되는 바이트의 수로 패딩 : ANSIX923 패딩
- 0으로 패딩 : Zeros 패딩
- 0x20으로 패딩
일반적으로 PKCS7 을 사용합니다.
2. 운영모드
평문 홍길동은연봉1억 을
[홍길동은] [연봉1억] 로 분리해(블럭단위)
[AAAA] [BBBB] 로 암호화 했다고 했을경우
누군가 악의적으로 해당 암호문을
[CCCC] [BBBB] 처럼 변경해
복호화된 데이터가
[나해커는] [연봉1억] 로 변환시키는 것을
방지하기 위한것이
운영모드입니다.
운영모드의 종류는 아래와 같으며
- ECB : 이전블럭과 현재블럭간의 연관성이 없으며 일반적으로 사용을 안합니다.
- CBC : 일반적인 운영모드
- PCBC : 복호화시 병렬(멀티스레드)수행이 가능합니다.
- CFB
- OFB
일반적으로 CBC 를 사용합니다.
3. IV
운영모드 에 필요한 초기값입니다.
공개되도 무방한 값입니다.
4. ENDIAN
비트를 컴퓨터 메모리에 저장하는 방법을 의미합니다.
일반적으로 C 는 little-ENDIAN 을 사용
java 는 big-ENDIAN 을 사용합니다.
대부분 C 와 데이터 송수신시 데이터가 깨지는 이유는
ENDIAN 규약을 맞추지 않아서 생긴 문제입니다.
6. byte 배열을 문자(아스키코드)로 변환하는 인코딩 규약
이부분은 잘 아실거라고 생각을 합니다.
- BASE64
- HEX코드(16, 32진수)
7. 캐릭터셋.
이부분은 사소한것 같으면서도
많이 실수하는 부분입니다.
유니코드(UTF-8), EUC-KR 등 문자를 바이트로 변환할때 규약도
맞춰야 합니다.
'I.T > Programming' 카테고리의 다른 글
소스코드 HTML 브러쉬 설정 (0) | 2014.01.14 |
---|---|
Float to Int, Double to Int 형변환 때 -1 되는 현상 (0) | 2013.09.30 |
WPF 개발자가 MVVM을 선호하는 이유 (3) | 2013.02.20 |
[C#]Visual Studio .Net 에서 MDA 오류로 디버깅 못할 때 (0) | 2013.02.07 |
[C/C++]클래스 상속에 관련한 간단한 예제 (0) | 2013.01.10 |