SEED 알고리즘이요 리눅스 윈도우 암호문이 달라요..
자바하고 c언어에서 암호화 한 값이
ciphertext : cc f 38 f4 55 d 8d 86 94 9f 64 9e 82 d1 d1 fb
이렇게 동일한데요
리눅스에서 하면 암호문이 위와 다르게 완전 다르게 나와요...
제가 찾고 있던 것이
이 링크에 있길래 참고를 했는데요.. 링크도 안걸리구요..ㅜㅜ
엔디안을 어떻게 하라는지 모르겠어요...ㅠㅠ
도와주세요
-------추가 내용---------
KISA 에서 제공된 그대로 라즈베리파이(리눅스)에서 가져다 사용했습니다.
코드가 많이 길어서 제 블로그에 추가했습니다
SEED_KISA.h
http://tjddnjs1027.blog.me/220644452421
- 위에 링크 걸려있는 글보고 SEED_KISA.h 에서 43번째줄에 #define LITTLE_ENDIAN과 .. #define BIG_ENDIAN을
MY_LITTLE_ENDIAN, MY_ BIG_ENDIAN 이렇게 수정하였는데요 컴파일 하면 워닝이 생기지는 않더군요..
근데 이게 아닌것 같아 다시 원래대로 돌려놓았어요..
- 여기서 "SEED_KISA.c" 를 참조하지 못해서 #include "SEED_KISA.c" 를 추가하였어요
SEED_KISA.c
http://tjddnjs1027.blog.me/220644453695
- 수정 사항없음
SEED_test.c
http://tjddnjs1027.blog.me/220644455024
- 테스트 부분(수정 사항없음)
결과
http://tjddnjs1027.blog.me/220644467431
- 비주얼스튜디오와 자바로 했을 때 결과 값이 동일하게 나오구요
- 첫 번째 그림은 비주얼 스튜디오에서 실행한 결과 값인데, 자바와 동일하게 생성되구요..
- 두 번째 그림은 라즈베리파이(리눅스)에서 실행한 결과 값이고, 동일하지 않아요..
왜 그런지 모르겠어요...
상황 재현이 되는 코드샘플을 올려주시면 답변이 금방
상황 재현이 되는 코드샘플을 올려주시면 답변이 금방 달릴 것입니다
넵!
-- 내용 추가했어요 ㅜㅜ
[1] PC 리눅스에서 실행 제곁에는 라즈베리파이
[1] PC 리눅스에서 실행
제곁에는 라즈베리파이 환경이 없으므로, 우선 PC의 리눅스에서 해 봤습니다.
블로그에 올려주신 코드는 SEED_KISA.h 에서 SEED_KISA.c 를 #include 하고 있네요.
그 줄은 부적절하므로 삭제합니다.
그리고 BIG_ENDIAN, LITTLE_ENDIAN 정의가 시스템의 다른 헤더파일과 충돌하고 있으므로
BIG_ENDIAN, LITTLE_ENDIAN 문자열을 SEED_BIG_ENDIAN, SEED_LITTLE_ENDIAN 정도로 바꿔줍니다.
질문글을 보니 .h 파일만 바꿔보신 것 같은데요, .c 파일도 바꿔야 합니다.
vim을 쓸 경우 아래와 같이 하면 될 것입니다.
수정하고 아래와 같이 컴파일하고 실행해보니 잘 되네요.
굳이 -m32 옵션을 줘서 32-bit 빌드를 한 이유는,
32-bit 빌드만 잘 동작하고 64-bit 빌드는 오동작하는 문제가 생기기 때문입니다.
이는 KISA의 레퍼런스 코드 자체가 갖고 있는 문제같습니다.
[2] 라즈베리파이의 리눅스 환경에서 실행하기 위한 준비
라즈베리파이 환경이 없으므로,
그 환경에서 빌드/실행시 고려해야 할 점만 생각나는대로 적어둡니다.
첫째, RPi2 까지는 어차피 32-bit 환경이므로 64-bit 빌드문제는 생기지 않을 것입니다.
둘째, SEED_KISA.h 에서 시스템의 바이트오더를 판별하는 아래 코드는
RPi2같은 ARM 환경에 대한 고려가 되어 있지 않습니다.
(사실 64-bit PC 환경인 x64_64도 고려되어 있지 않네요.
64-bit 환경은 고려해서 빌드해도 어차피 오동작합니다만.. )
아래와 같이 /usr/include/endian.h 에서 정의되는 __BYTE_ORDER를 먼처 체크해보는 식으로 수정하면
RPi2의 리눅스 환경에서도 동작하지 않을까 생각합니다.
대충 수정한 것이니 너무 믿지는 마시고요.
이 판별코드가 말을 안 들으면 그냥 시스템의 바이트오더를 알아내서
하드코딩하고 확인해 보셔도 되겠죠.
최초 질문과는 관련이 적은 문제라서 댓글달기
최초 질문과는 관련이 적은 문제라서 댓글달기 죄송합니다만,
[*] 64-bit 빌드시 오동작 문제
SEED_KISA.h의 DWORD 타입 정의부분에서
4바이트로 정의할 타입이 8바이트짜리로 잘못 정의되면서 생긴 문제네요.
아래와 같이 수정해보니 64-bit 빌드해도 잘 동작합니다.
[*] openssl
openssl-0.9.8f 부터 SEED 가 포함되어 있다고 합니다.
(SEED 256은 아니고 SEED 128만 포함됨)
http://seed.kisa.or.kr/iwt/ko/sup/EgovSeedInfo.do 페이지에 나오는 참조구현값을,
openssl에 통합된 SEED 코드를 통해 확인해보려면 아래와 같이 해볼 수 있겠습니다.
복호화까지 해보려면 아래와 같이 하면 되고요.
SEED 블록암호 알고리즘에 나오는 KISA_SEED_128_C_32bit.zip 샘플코드에서도 이 테스트벡터를 쓰고 있으니 대조해 보면 참고가 됩니다.
별 내용은 아니지만, 처음 시작할 때 헤매는 시간을 좀 줄일 수 있기를 바랍니다.
해냈어요!
괜찮아요!! 관련이 없더라도 제가 더 배울 수 있는 부분이여서 좋아요
제가 실수한 부분도 있었어요
#define BIG_ENDIAN
#else
#define LITTLE_ENDIAN
이렇게 해놔야 하는데 리틀 엔디안과 빅 엔디안 위치가 서로 바뀌었었어요
그리고 라즈베리파이에서는 32비트만 되나봐요
-m32 가 입력되지 않아서 지우고 했더니 컴파일 했더니 컴파일 되고, 실행 결과 값이
동일하게 나왔어요
정말 정말 정말 정말로 감사합니다ㅜㅜ
http://seed.kisa.or.kr/iwt/ko
http://seed.kisa.or.kr/iwt/ko/sup/EgovSeedInfo.do
참조 구현값을 보시고 확인하시면 될것 같습니다.
제가 키 값은 다르게 했는데요
윈도우 기반에서 처음할 때, 참조 구현값과 동일하게 나왔었어요 ㅜㅜ
- 여기서 "SEED_KISA.c" 를 참조하지
- 여기서 "SEED_KISA.c" 를 참조하지 못해서 #include "SEED_KISA.c" 를 추가하였어요
부분이 잘못되었습니다.
.c 파일을 include해서 쓰는것이 아니라 링킹시 추가 해주어야 합니다.
Endian값 define 보다 ifndef 가 먼저 쓰인것도 이상합니다.
다운받아 돌려보거나 하지는 않았지만
header와 source, compile, linking등에 대하여 확인해보시면 좋을것 같습니다.
댓글 달기