Search

'Embedded network'에 해당되는 글 2건

  1. 2017.06.17 SSL/TLS embedded for IoT #6
  2. 2015.02.20 IoT Project 1. 컨셉 작업.

SSL/TLS embedded for IoT #6

Embedded SSL 2017.06.17 17:19 Posted by Dwarp

SSL/TLS embedded for IoT


이 글은 embedded IoT device의 보안에 관한 글입니다.


embedded SSL/TLS 여섯번째입니다.



너무 몰아붙이나요? ㅎㅎ 아니겠죠 ㅎㅎ 저만 ㅠㅠ 여러분들은 시간날 때 보면 되니까 ㅠㅠ 암튼 전 주말이지만 기다리시는 분들이 계셔서 계속 진행합니다. 오늘은 W5500 iolibrary와 mbedTLS를 이어 붙이는 시간이 될 거에요. 하지만 그 전에 SSL/TLS라는 게 서버든 클라이언트든 있어야 하잖아요?


또 그러기 위해서는 뭔가... 그 뭐냐... 그그그그그.... Application!이 있어야 하겠죠? 제가 건망증이 좀 있습니다. 양해 좀 ㅎㅎ


우리가 지금 IoT 하고 있잖아요? 그래서 네트워크 어플리케이션으로 MQTT를 정하겠습니다. MQTT는 뭐냐고요? 그건 뭐..... IoT에 특화된 네트워크 프로토콜입니다. 찾아보시면 금방 자료 나와요. 전 라즈베리파이에 MQTT 서버를 SSL 모드로 열어놨습니다. 특별한 문제가 없으면 오픈해 놓으려고 하니 테스트 해보셔요. 아래는 제가 open 해놓은 MQTT Broker(서버) 주소 입니다.


<라즈베리 파이>


IP: 222.98.173.239

Port 일반 TCP: 1883

Port 보안 TCP: 1884

Port 일반 websocket: 8883

Port 보안 websocket: 8884


** 경고!!!!!!!! 아시겠지만 테스트 용도로만 사용하시고 상업적인 용도로 사용하지 마세요. 제가 손해봐서 그러는게 아닙니다. 여러분들이 고생합니다. ㅠㅠ 사전 경고 없이 서버가 꺼지거나 할 수 있는데 정작 저는 모를 수 있어요.



<제 책상의 라즈베리파이 MQTT 서버 - 언제나 꺼질 지 모르는 완벽한 불안정 속에 위치해 있다.>


** 리눅스에 MQTT 서버 설치/Open SSL 인증서 만드는 법 등 요청하시면 따로 포스팅 하겠습니다.


자 그럼 다시 코드로 넘어가겠습니다. mbedTLS와 관련하여 만들어야 할 함수가 존재하겠죠? 근데 뭐가 필요하죠? mbedTLS 코드를 다운로드 받으면 여러 예제가 있긴 하지만 보고 있으면 괴롭기만 할 뿐입니다. 괴로운건 ㅠㅠ 제가 이미 봤으니까 여러분들은 핵심만 가져가세요. (왜 남 좋은 일 하냐구요? 뭐 고마운신 분들은 댓글 주세요. 계좌번호 드릴테니까 돈 좀 주세요. 아니면 연봉 1억쯤 주시고 데려가서 노예로 쓰시면 됩니다.)


자! 쓸데없는 소리 그만하고 만들어야 할 함수를 설명하겠습니다.


wiz_mbedtls_ssl_init();

먼저 SSL이라고 피해갈 수 없겠죠? 초기화를 해야만 합니다. 각종 메모리 할당, callback 등록 등의 과정이 들어 있을 겁니다.


wiz_mbedtls_ssl_deinit();

뭐 이건 초기화의 반대네요. mbedtls가 malloc/free를 쓰는 이상 리소스 관리를 하지 않을 수가 없겠죠? init가 malloc을 했다면 deinit은 free를 주로 하겠네요.


wiz_mbedtls_ssl_handshake();

handshake를 처음에 설명드렸는지 안했는지 기억이 안납니다. ㅎ 암튼 SSL은 암호화된 통신을 하기 전에 서버와 클라이언트 사이의 암호화 방법을 결정하고 인증서를 교환하는 등의 과정을 거칩니다. 이 과정을 handshake라고 부르는데요 이 과정도 약간 프로그래밍을 해줘야 합니다. 대놓고 mbedtls_ssl_handshake()라는 함수를 사용해도 되지만 전 일단 감싸주려고 합니다. 처리해야 할 것도 약간 있구요.


wiz_mbedtls_ssl_random();

거의 모든 보안 알고리즘들은 난수를 필요로 합니다. 완벽한 난수일 수록 좋지요. 어쨌든 mbedTLS도 random 함수를 callback으로 묶어줘야 합니다. 없으면 기본적으로 내장된 rand()함수를 사용하게 프로그래밍 되어 있겠지만 음.. analog 입력을 받아(open 상태로) 그거라도 SEED를 줘서 rand()를 돌리는 게 훨씬 좋을 것 같습니다.


wiz_mbedtls_ssl_send();

기본적인 send()라고 보시면 됩니다. 일반적인 socket프로그램을 사용하면 mbedtls option질로 안 만들어도 되는 함수가 되겠지만 iolibrary는 일반적인 socket 프로그래밍 방식과는 약간 차이가 있기 때문에 iolibrary의 send를 한 번 감싸준 함수입니다.


wiz_mbedtls_ssl_recv();

wiz_mbed_ssl_send() 함수와 같은 역할입니다. 기본적인 recv함수 입니다.


wiz_mbedtls_ssl_recvtimeout();

동작은 wiz_mbedtls_ssl_recv와 같지만 time out 값을 지정해 시간내 응답이 없으면 TIME_OUT ERROR를 발생시키기 위한 목적입니다. wiz_mbedtls_ssl_recv와 wiz_mbedtls_ssl_recvtimeout 둘 중 하나만 콜벡으로 등록하면 된다고 기억하고 있지만 어쨌든 둘 다 만들어 봅시다.


아~~ 오늘은 토요일이라서 하기 싫다~~~ 그냥 소주나 한잔 먹고 싶다~


그래서 오늘은 이만 여기까지 쓰겠습니다. ㅎㅎ 다음 시간에는 함수 구현해 봅시다~~


안녕~

저작자 표시
신고

'Embedded SSL' 카테고리의 다른 글

SSL/TLS embedded for IoT #8  (0) 2017.06.27
SSL/TLS embedded for IoT #7  (0) 2017.06.19
SSL/TLS embedded for IoT #6  (0) 2017.06.17
SSL/TLS embedded for IoT #5  (0) 2017.06.16
SSL/TLS embedded for IoT #4  (0) 2017.06.15
SSL/TLS embedded for IoT #3  (6) 2016.12.28

IoT Project 1. 컨셉 작업.

IoT - Internet Of Things 2015.02.20 02:27 Posted by Dwarp


IoT Project 1. 컨셉 작업



어떠한 프로젝트라도 진행하는데에는 분명한 목적이 있습니다. 예를 들면 이런 것들이죠.


Ethernet으로 소방 관제 시스템을 만들자! 라던지


Ethernet으로 강아지 밥주는 시스템을 만들자! 라던지 기타 등등 이죠.


하지만 이런 생각만 가지고는 프로젝트를 시작할 수는 없습니다.


흔히들 프로젝트가 산으로 간다고 말하는 매우 위험한 상태가 쉽게 올 수 있습니다.


어줍잖게 산으로 가다가 산을 넘어서 최단 경로로 목적지에 도달할 수도 있겠지만 가능성은 희박합니다.



그래서 전 항상 프로젝트 시작 첫 번째로 "컨셉 작업"이라는 것을 합니다.


말 그대로 프로젝트 컨셉을 잡는 작업입니다. 비용이라던지 개발 시간이라던지 방향을 잡아 놓고 진행하는 거죠.


물론 프로젝트마다 틀리겠지만 필수적인 요소를 정의하고 난 후 사용자를 고려해 성능, 기능 등을 트레이드 오프합니다.


이 과정에서 거의 모든 것이 결정된다해도 과언이 아닙니다.

(프로젝트의 성공 가능성 마저도)


그래서 저는 이 단계에 공을 상당히 많이 들이는데요.


프로젝트의 목적, 프로젝트의 타겟, 타겟의 지출 비용(돈, 시간), 개발 비용, 개발 시간 기타 등등등


이런 요소들에 대해 시간을 가지고 충분히 생각을 정리합니다.



그럼 시작하겠습니다.



먼저 이 프로젝트의 목적은 "IoT의 접근성이 용이해졌다는 것의 증명과 매우 쉬운 교육"입니다.

(절대 교육용 보드 판매가 목적이 아님을 분명하게 밝힙니다.)


음...그러니까! IoT 교육용 프로젝트가 되겠군요! 당연히 메인 MCU, 그리고 Ethernet Interface가 필수적인 요소입니다.


그리고 사물인터넷이라고 부를 만한 컨트롤 대상이 필요하겠죠? 음. 이건 필수라고 생각되어지진 않네요.


이외 프로젝트 목적에 따라 필수 요소가 더 정해지겠지만 목적 자체가 교육용이고 지루하므로 더 언급하지는 않겠습니다.


그렇다면 프로젝트의 타겟은 누가 될까요? 하는 김에 페르소나도 한명 만들어 봐요. 연습연습.



이름 "서 경준"


나이 29세, 그리 유명하지 않은 전자과를 학점 3.5로 졸업. 그냥 동네 아는 형처럼 생겼음.


교육용 보드를 통해 AVR로 프로젝트를 진행해 교내 대회에 출전하여 입상 경력이 있음.


중소 기업에서 1년째 개발자로 일하고 있으며 연봉은 2,600만원. 주 3회 이상 야근을 하지만 수당은 없음.


집과 회사가 출퇴근하기에는 거리가 멀어 월세 40만원의 원룸에서 생활중.


경력을 쌓아 더 좋은 직장으로 이직하고 싶으나 1년 째 AVR 펌웨어만 작성 중.


다른 MCU나 기술, 회로 등을 배우고자 하지만 고지식한 딱딱한 회사 분위기로 인해 사내에서는 쉽지 않음.


아버지는 중소 기업 부장, 어머니는 전업 주부임. 4살 어린 여동생이 현재 대학교 4학년임.


(주의!! 원래 페르소나 작업은 이렇게 허술하게 하지 않습니다. 프로젝트 진행에 몰입감을 주기 위함입니다.)




자 그럼, 타겟도 정해졌고 사용자 입장에서 생각해 봅시다.



1. 서경준씨는 무엇을 배우고 싶을까요?


AVR 말고는 다른 MCU를 사용해 본적이 없는 경준씨는 Cortex M3에 관심이 많습니다.


그래서 5만원짜리 교육용 보드를 구매해서 사용해 본적이 있습니다. 하지만 방 구석에 방치 중입니다.


IDE 설치하는 것만으로 지쳐버렸습니다. 다운받고 압축풀고 라이센스 받고 이메일 확인하고 라이센트 활성화하고...


괜히 지치고 힘만 빼고 더 어려운 것이라는 생각만 들었습니다. Jtag을 따로 구매해야 한다는 사실은 덤.


요세 대세라고 불리우는 IoT도 해보고 싶으나 임베디드 Ethernet은 엄두도 내지 못합니다.



2. 우리 경준씨는 교육에 얼마의 비용을 소비할 수 있을까요?


경준씨는 낮은 연봉과 월세때문에 지출할 수 있는 비용이 많지 않습니다. 그렇다고 집에 손벌리기도 싫습니다.


임베디드 학원은 금액(약 30-40만원)이 비싸 엄두가 나지 않아 스스로 할 수 있는 교육 교재를 찾고 있습니다.


모든 것이 포함된 총 비용이 6~7만원이면 적당하다고 생각합니다.



3. 그렇다면 우리 경준씨는 얼마의 시간을 소비할 수 있을까요?


야근이 잦은 경준씨는 항상 피곤합니다. 1주에 3시간 이상은 무리이며 하고 싶지도 않습니다.



저는 이런 경준씨를 통해 필수적인 요소 이외에 규칙 몇가지를 세웠는데요. 다음과 같습니다.


1. IDE(통합 개발 환경)은 무료툴을 사용.

2. 총 비용이 5만원을 초과할 수 없다.

3. JTAG 구매 등의 추가 비용 발생은 없다.

4. 교육 성과를 획득할 수 있는 각 단계의 시간은 30분 이내로 조절.





이제 어느 정도 컨셉작업이 끝났습니다. 상당히 지루한 내용이었네요. 휴 수고하셨습니다.


하지만 저는 거의 2주 정도나 되는 긴 시간 동안 고민했었습니다. ㅎㅎ

(물론 이 내용 외에 소자 종류, 가격 등도 함께 알아 보고 있었지만;;)


한 가지 주의 할 점이 있어서 말씀드리는데요~ ㅎㅎ


이 프로젝트의 타겟은 가상의 인물인 서 경준씨 이지만 이 글의 타겟은 IoT 프로젝트를 진행하시고자 하는 여러분들입니다. ^^

(프로젝트 안의 프로젝트랄까요? 헤깔리지 마세여~)


다음 시간에는 주요 소자들을 선정해 보도록 하죠.


그럼 다음 시간에 뵙겠습니다.


-Dwarp-

저작자 표시
신고