티스토리 뷰
검색하다 하다 화딱지가 나서 직접 글을 써야겠다는 마음이 들었다.
졸업작품으로 아두이노-안드로이드 블루투스 통신부분을 구현하던중
주고받는 데이터를 암호화해서 보내기 위해 DES 라이브러리를 사용했었다.
아두이노/안드로이드 DES라이브러리는 구현된것도 많고 정말 쉽게 구현할 수 있었지만,
DES는 무겁고...아두이노 메모리는 작고...
램때문에 보드에 올려볼수조차 없었다ㅠㅠ
그래서 교수님께서 대안으로 제안해주신것이 국산암호 LEA
설명과 소스코드 다운로드는 여기서
정말 너무너무너무너무 잘되있는데, 뭐가 어디 있는지를 몰라서 엄청 헤맸다...ㅠㅠ
AES보다 1.5배~2배정도 빠른 성능을 자랑하는
자랑스런 우리나라 국산암호이다
비교적 최근에 개발되었는데, 그래서 그런지 kisa에서 제공해주는 스마트폰용 라이브러리에는 LEA가 없다.
그러나, LEA 설명페이지의 맨 아랫부분에 소스코드 다운로드를 누르면 구현된 소스코드를 다운받을수 있는 페이지로 넘어간다.
이렇게, 소스코드를 다운받을 수 있다.
C, openssl용 C, Java, Python으로 구현된 LEA 소스코드들이다.
그래서 나는 이걸 다운받으면서, 안드로이드는 Java 소스코드를 jar파일로 라이브러리화 시키면 될거고
아두이노는 c 코드를 라이브러리화 시키면 되겠네.......라고 생각 했지만.............
저 압축파일에 올라와있는 LEA C코드는 철저히 컴파일러로 컴파일을 하기 위한 코드들이었다....
필요한 부분만 뽑아내서 새 c코드를 만들어내려니 그것도 복잡...
아두이노에서 지원해주지 않는것들 투성이...
검색해도 아무것도 안나오고....ㅠㅠ
그러나......자랑스런 우리나라 KISA에서는...
무려 아두이노 코드를 제공해주신다.....
흑....이걸 한 이틀 고민하다가 새벽 3시에 찾았는데 이거 찾고 눈물을....거의 눈물을 흘릴뻔 했다.
꼭꼭 숨어있어서 찾기 힘들었지만 사물인터넷 시대에 걸맞게, 아두이노 보드에 올릴 수 있도록 미리 코드를 구현해 주셨다ㅠㅠ
LEA 외에도, ARIA, SEED, HIGHT 가 구현된 아두이노 소스코드들이 올라와있고, 친절히 LEA를 사용하는 예제까지 올라와있다.
램이 작은 아두이노에 적용하기 위해 다 없애고 딱 필요한부분만 구현된 소스코드였다.
LEA 소스코드는 딱 세개의 함수가 구현되어 있는데,
LEA_Key(BYTE pbUserKey[16],DWORD pdwRoundKey[24][6]) :
pbUserKey를 사용해 RoundKey를 생성해준다. 이 함수에서 pbUserKey는 Input, pdwRoundKey는 output이다.
RoundKey를 이용해 encrypt, decrypt 과정이 일어난다.
그러므로, encrypt, decrypt 과정 전에 꼭 호출시켜줘야함!
LEA_Enc(DWORD pdwRoundKey[24][6],BYTE pbData[16]) :
위에서 생성된 RoundKey를 이용해 pbData를 암호화해준다.
이 함수의 input은 RoundKey, pbData이고, output은 pbData이다.
pbData에 암호화된 값을 덮어쓰는 형식이라
차라리 byte[]를 리턴해주는형식이었으면 조금 더 편했을거 같다고 생각했지만, 아무렴 상관없다.
LEA_Dec(DWORD pdwRoundKey[24][6],BYTE pbData[16]) :
위에서 생성된 RoundKey를 이용해 pbData를 복호화해준다.
이 함수의 input은 enc와 마찬가지로 RoundKey, pbData이고 output은 pbData이다.
이렇게 쉽게.... 한 이틀을 c코드 라이브러리화 시키느라 고생했는데....
이렇게 쉽게 암호화/복호화가 끝나버렸다 ^^
아, LEA소스코드 모음 압축파일을 다운받아서 실행시키다보면,
모든 소스코드가 ecb, cbc, gcm등의 모드로 구현되어 있는것을 확인할 수 있다.
그에 반해, 아두이노는 메모리 때문인지 딱 16바이트 블록암호만 암호화/복호화가 가능하다.
16바이트의 값을 주고 받을 것인데 안드로이드와 아두이노의 호환을 위해서,
안드로이드에서는 받은 값을 ecb모드로 암호화/복호화 하되
padding을 하지 않고 doFinal 함수만 호출 해주면 된다.
'보안' 카테고리의 다른 글
[컴퓨터보안] gnuTLS 설치/사용 및 예제 실행하기 (0) | 2016.08.19 |
---|
- Total
- Today
- Yesterday
- 그리디 알고리즘
- 풀다운 저항
- LCS
- 아두이노
- POST
- 아두이노 우노
- 다이나믹 프로그래밍
- postgresql query
- 초대장나눔
- 아두이노 우노 버튼
- Greedy Algorithm
- 아두이노 버튼 LED
- 자동 Solitaire
- 아두이노 LED 제어
- postgresql php
- 그리디
- 아두이노 외부 LED
- 풀업 저항
- usb파티션
- gnutls
- Solitaire 프로그래밍
- postgresql SELECT
- 아두이노 LED
- 탐욕 알고리즘
- 욕심쟁이 알고리즘
- 최장공통부분열
- 아두이노 LED 회로
- 멀티부팅
- c++ Solitaire
- Longest Common Subsequence
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |