PlatformIO (1) - 개요 및 특징

Cortex-M series 급을 이용한 임베디드 시스템 개발을 하다 보면, 지속적으로 사용할 수 있는 통합 개발 환경이 마땅치 않다는 문제가 있다. Windows 나 Linux 라면 한번 익혀 두면 수년은 두고 두고 쓸수 있는 개발 환경들이 있지만 임베디드 개발 환경의 경우 MCU 가 바뀔 때마다 전체적인 개발환경도 바꾸어야만 하는 경우가 생긴다. 개발 환경의 범위를 최소 셋인 컴파일, 다운로드 만이 아닌 디버깅, unit test 까지로 고려한다면 범위가 더 좁아 질 수 밖에 없다.

Systemd의 특징과 Yocto에 적용하기

Yocto project에서 기본 설정으로 빌드하면 SysV Init를 사용한다. 개발하는 제품이 이더넷 네트워크로 연결되고, 부팅 이후에는 네트워크 환경이 변하지 않는다면 SysV Init를 이용하는 것이 구조도 단순해서 더 좋을 수 있다. 하지만 다음과 같은 사항을 고려하고 있다면 systemd를 적용하는 것을 검토해 볼 수 있다. Daemon 이 죽는 경우를 검출하여 재시작 관리가 필요한 경우 Wi-Fi 와 같이 동적으로 변경될 수 있는 네트워크 관리가 필요한 경우 불규칙하게 네트워크가 끊길 수 있는 조건에서 시간 동기화가 필요한 경우 프로그램에 CPU 또는 메모리 자원을 제한하기 위하여 cgroups를 사용하려는 경우 효과적인 로그 관리를 위하여 journald를 사용하고 싶은 경우 부팅 직후 초기 프로세스의 실행 시간을 줄여 보려는 경우 물론 위의 기능을 사용하기 위해서 systemd만 가능한 것은 아니지만, systemd를 사용하는 경우 별도의 프로그램 없이 위 기능을 쉽게 적용할 수 있다.

Syslog and Journald

대부분의 최신 linux 배포본에서 systemd를 적용하면서 로그 시스템도 syslog 에서 systemd 의 journald로 변경되었다. PC급 이상의 linux 배포본에서는 journald와 기존 호환성을 고려하여 syslog 데몬이 같이 사용하도록 기본 설정되어 있고, 상대적으로 광활한 저장장치과 메모리를 가지고 있고, 적절한 용량 선에서 log rotate가 되도록 설정되어 있어, 사용자가 설치 후 로그에 대해서는 신경을 쓸 필요가 거의 없다. 하지만 용량이 작은 저장장치와 메모리를 가진 embedded linux 제품을 개발하는 경우에는 시스템 로그를 어떤 식으로 관리 할지 충분히 고민하고 설정하여야 한다.

TLS/암호 알고리즘 쉽게 이해하기(13) - MAC, AE, AEAD

지금까지 설명한 암호화 알고리즘을 조합하여 확장을 해보기로 한다. 이 글에서 설명할 내용은 다음과 같다. MAC(Message Authentication Code) AE(Authenticated Encryption) AEAD(Authenticated Encryption with Associated Data) MAC (Message Authentication Code) MAC은 한마디로 정리하면 Hash에 비밀키를 추가한 버전이라고 볼 수 있다. 키를 사용한다는 것으로 보면 DSA 디지털 서명과 비슷한 기능을 수행하지만, 공유키를 사용한다는 것이 다르다. DSA는 Alice의 공개키를 가진 다수의 사람이 검증을 위한 용도이고, MAC은 키를 공유한 사람 간에 검증을 하기 위한 용도이다. 물론 연산량도 DSA와 비교하여 더 적고 빠르다.

TLS/암호 알고리즘 쉽게 이해하기(12) - ECDH, ECDSA

이전 글 Elliptic Curve Cryptography(ECC)에서는 타원곡선 암호의 특징 및 알고리즘을 알아보았다. 이번에는 이를 활용한 암호화 응용과 실제 사용 예를 살펴보기로 한다. ECC vs. RSA 공개키 암호화 방법으로 RSA와 비교하여 이야기 되나, 실제적으로 ECC는 RSA와 동일한 기능으로 사용하지는 않는다. 정확히는 RSA가 아니라 이산대수 문제를 이용한 DH 나 DSA 용도로 사용한다고 말할 수 있다. RSA의 경우 아래와 같이 평문 $k$ 를 공개키 $e$로 모듈러 지수 연산을 하는 형식이다. $$ E = k^e \pmod{n} $$

TLS/암호 알고리즘 쉽게 이해하기(11) - Elliptic Curve Cryptography(ECC)

타원 곡선(Elliptic Curve)는 일반적으로 생각하는 가로 세로비가 다른 길쭉한 원을 말하는 것이 아니라 다음과 같은 공식으로 구성된 곡선을 말한다. $$y^2 = x^3 + ax + b$$ $a$ 와 $b$ 는 임의의 수로 특이점이 없도록 다음과 같은 조건을 만족하여야 한다. $$4 a^3 + 27b^2 \neq 0$$ 이와 같은 조건을 만족하는 곡선은 다음과 같은 모양을 가진다. b=1, a=2~-3 일 때의 모양 만일 위 조건을 만족하지 않는 경우는 아래와 같이 첨 점이거나 교차하는 특이점이 있다.

TLS/암호 알고리즘 쉽게 이해하기(10) - Hash

Hash 함수란 임의의 길이의 데이타를 축약하여 고정된 길이의 데이타로 매핑하는 함수를 말한다. 데이타 검색을 위한 hash 함수, 데이타 손상을 검출하기 위한 CRC32 도 hash 함수 이지만, 이 글에서 언급하는 것은 암호화 해시 함수이다. 각 용도에 따라서 해시 함수의 특성은 다음처럼 다를 수 있다. 데이터 검색용: 모든 입력 데이타에 대해서 hash 결과값이 균등 분포를 가져야 한다. 데이타 손상 검출용: 원하는 비트 개수 까지의 오류에 대해서 정확히 검출되어야 하고, 알고리즘에 따라서 제한된 비트 개수 까지 오류 복원이 가능하여야 한다.

TLS/암호 알고리즘 쉽게 이해하기(9) - Digital Signature

DSA는 Digital Signature Algorothm 의 약자로, 미국 NIST 에서 제정한 디지털 서명 알고리즘이다. 이번 글에서는 이와 같은 디지털 서명에 관한 전반적인 사항을 다음과 같은 순서로 정리한다. RSA 서명 알고리즘 ElGamal 서명 알고리즘 DSA 서명 알고리즘 OpenSSL 을 이용한 동작 확인 RSA Signature RSA 서명 방식은 앞의 RSA 글에서 언급한 것과 같이 개인키로 문서의 Hash 값을 암호화 하는 것으로 RSA의 동작 원리를 알고 있으면 직관적이다. 관련 표준은 PKCS#1의 8장 을 보면 된다.

TLS/암호 알고리즘 쉽게 이해하기(8) - RSA

지난 번에 설명한 이산대수를 이용하면 RSA 의 기본원리도 쉽게 이해할 수 있다. RSA는 이름에 특별한 의미는 없고, 알고리즘을 발명한 사람들(Ron Rivest, Adi Shamir, Leonard Adleman)의 약자를 따서 만든 것이다. AES와는 달리 공개키(public key)와 개인키(private key) 두 벌로 구성된 키를 가지고 있는 비대칭키 암호화 알고리즘이다. 가장 일반적인 사용용도는 다음과 같이 Bob 이 Alice에게 암호 데이타 전달하는 방법이다. Alice의 공개키는 공개되어 누구나 알수 있다. Bob은 Alice의 공개키를 이용하여 암호화 하여 일반 채널로 전달한다.

TLS/암호 알고리즘 쉽게 이해하기(7) - Diffie-Hellman Key Exchange

지난 번에 설명한 이산대수를 이용하여 Diffie-Hellman Key Exchange(DHKE, 키교환 또는 키합의)을 이해해 보자. TLS 암호화 채널을 절차를 간단하게 보면 다음과 같다. 서버를 믿을 수 있는지 검증, 필요시 클라이언트도 인증 RSA 암호화 채널로 키를 전달하거나, Diffie-Hellman 방식으로 키교환 교환한 키로 AES, ChaCha20와 같은 대칭키로 암호화 Diffie-Hellman은 여기서 두번째 대칭키를 교환하는 방법이다. RSA와 같은 비대칭키를 이용하여 암호화 채널을 만든 후 이를 이용하여 대칭키를 전달하는 것은 직관적이다. 하지만 Diffie-Hellman 방식은 이와 같은 암호화 채널 없이도, 서로 키를 교환할 수 있는 방식이다.