TLS/암호 알고리즘 쉽게 이해하기(6) - 이산 대수

키 합의, 비대칭키는 역연산이 실제적으로 불가능한 수학적 이론을 기반으로 만들어진 알고리즘이기 때문에, 이의 기본 동작을 이해하기 위해서는 수학적인 지식이 어느정도 필요하다. 여기에서는 이들 알고리즘의 동작 원리에 필요한 최소한의 수학을 정리해본다. 타원알고리즘을 제외하고, 키합의와 비대칭키 알고리즘을 이해하기 위해서는 다음과 같은 것을 알아야 한다. 소인수 분해 유클리드 호제법을 이용하여 두 수의 최대 공약 수 찾기 확장 유클리드 호제법으로 소수 모듈로 연산에서 곱하기 역원 찾기 페르마 소정리를 이용하여 소수 모듈로의 지수 연산 역원 찾기 오일러 정리를 이용하여 일반 모듈로에서 지수 역원 찾기 소인수 분해 임의의 정수를 소인수 분해하는 데에는 효과적인 방법이 없다.

TLS/암호 알고리즘 쉽게 이해하기(5) - Stream Cipher

일정 데이터 단위로 암호화를 하는 블럭 암호와 비교하여 스트림 암호(Stream Cipher)는 비트 또는 바이트 단위로 암호화를 하는 방식이다. 쉽게 말해서 블럭 암호는 키를 사용하여 (필요하면 IV도 포함해서) 블럭단위로 전치와 치환을 통하여 암호하를 가하는 방식이라고 할 수 있다. 이와 비교하여 스트림 암호는 키와 IV(Initial Vector)로 다양한 연산을 이용하여 난수열을 만들고, 이를 이용하여 평문과 XOR 과정을 통하여 암호화를 하는 것이다. 블럭 암호에서 설명한 AES-CTR와 같은 것이 이와 같은 난수열을 만드는 방법 중 하나이다.

TLS/암호 알고리즘 쉽게 이해하기(4) - Block Cipher Mode

이전 글의 Block Cipher(블럭암호) 암호화 방법을 그대로 사용하기에는 몇가지 문제가 있다 (아래 내용에서는 AES로 표기하나, 다른 블럭암호 방식에 공통적인 사항이다). 우선 첫번째 문제는 공격자가 암호키를 몰라도 암호 블럭을 순서를 바꾸어나 다른 내용으로 바꿀 수 있다는 것이다. AES 암호의 경우 128bits(16bytes) 단위로 암호화 되는데, 예를 들어 다음과 같은 거래 정보를 암호화 한다고 해보자. 1 2 3 4 5 6 7 8 9 10 11 struct { char from[16]; char to[16]; char amount[16]; } transaction; struct transaction tx = { .

TLS/암호 알고리즘 쉽게 이해하기(3) - Block Cipher

암호 알고리즘은 암호화/복호화 작업을 동일한 키 하나로 사용하는지, 아니면 암호화하는 키(공개키)와 복호화 하는 키(개인키)를 따로 사용하는지에 따라 각각 대칭키(Symmetric Key), 비대칭키(Asymmetric Key) 방식으로 나뉜다. 대칭키는 암호화 할때 일정 블럭 크기(예를 들어 128bits)를 한번에 암호화 할지, 아니면 비트/바이트 단위로 암호화 하는지에 따라서 블럭 암호(Block Cipher), 스트림 암호(Stream Cipher) 로 구분한다. 여기에서는 블럭 암호 방식에 대해서 설명한다. 블럭 암호 개요 비대칭키 방식은 역변환을 하려면 수십년, 수백년 이상 소요되어 실제적으로 역변환이 불가능한 수학적 이론을 바탕으로 구현되어 있지만, 대칭키인 블럭암호는 이리저리 뒤섞거나(전치), 연산이나 코드북을 이용해서 다른 값으로 변경(치환) 하는 작업을 복잡하게 반복하여 만들어낸 암호화 방법이다.

Yocto에 OSTree upgrade 적용(3) - 업그레이드/롤백 및 OSTree 리뷰

이전글 Yocto에 OSTree upgrade 적용(1) 에서 Yocto를 이용한 빌드 과정과, Yocto에 OSTree upgrade 적용(2) 에서 OSTree를 적용한 이미지의 부팅 과정에 대해서 설명하였다. 이번 글에서는 OSTree가 적용된 이미지를 실제로 업그레이드 하는 방법, 롤백 절차, 프로그램에서 이를 관리하는 방법에 대해서 설명한다. 이해를 돕고자 OSTree의 업그레이드 절차를 git과 비교하여 설명한다. OSTree는 ostree CLI 명령을 이용하여 업그레이드 과정을 수행할 수 있고, libostree library 를 이용하여 프로그램으로 구현할 수 도 있다. 이 글에서는 CLI를 이용하는 업그레이드 방법을 설명한다.

Yocto에 OSTree upgrade 적용(2) - 부팅 절차

이전글 Yocto에 OSTree upgrade 적용(1) - 이미지 생성 에서는 Yocto 빌드 과정을 통한 target 에 write 할 이미지를 만드는 과정까지 설명 하였다. 이번글에서는 부팅 이미지를 이용하여 부팅 절차를 설명한다. 디스크 이미지 파일 최종적으로 디스크에 쓰는 이미지를 Yocto 의 wic 툴을 이용하여 확인해 보면 다음과 같이 두개의 partition 으로 구성된다. Partiton 1(fat16): DOS FAT16 의 부팅 디스크로 u-boot 과 부팅에 필요한 설정 파일이 있다. 파일 중 boot.scr 파일이 있는데, 이 파일로 u-boot 의 script를 대체하여 OSTree 이미지가 로드되도록 한다.

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

암호 알고리즘에서 난수는 중요한 요소이다. 예를 들어 암호 키 생성 시에도 난수로 만드는데, 생성된 난수가 편향성을 가지게 되면 암호 알고리즘이 아무리 좋아도 취약해 질 수 밖에 없다. 한 예로 오래전 일이지만, 2008년 Debian linux OpenSSL 0.9.8 의 잘못된 patch로 seed를 current process ID 로만 사용하여 결과적으로 65,536개의 값 중 하나로 난수가 생성되어 brute force 공격으로 키를 찾을 수 있는 문제가 발생한 적도 있고, 이외에도 CWE(Commn Weakness Enumeration) 에서 random 으로 검색해보면 문제가 되었던 여러 케이스들을 찾아 볼 수 있다.

TLS/암호 알고리즘 쉽게 이해하기(1) - 개요

HTTPS의 SSL/TLS를 이해하는 것은 생각만큼 쉽지 않다. React, kubernetes 같이 오픈 생태계에서 핫 한 분야들은 다양한 시각으로 설명한 자료들이 많아 여러 방법으로 이해할 수도 있겠지만, 수십여년간 수학자, 암호학자들에게서 다듬어진 암호학에 대해서는 말랑말랑한 자료를 찾기가 쉽지는 않다. 좋은 자료라고 찾아 보아도 읽다 보면 이내 수많은 용어들과 수학 이론에 막혀 버리곤 한다. 그렇다고 제대로된 이해없이 SSL/TLS 나 암호화 알고리즘을 사용하게 되면 작은 실수로 인하여 보안에 심각한 문제를 만들 수도 있다. 여기에서는 일반 개발자를 위한 관점으로 암호 알고리즘과 TLS/SSL을 정리해 보기로 한다.

Yocto에 OSTree upgrade 적용(1) - 이미지 생성

Linux PC 의 경우 각 배포본 마다 yum, rpm, dpkg 등의 package manager를 제공하여, 이를 이용하여 패키지를 최신 버전으로 유지 관리할 수 있다. 임베디드의 경우도 Raspberry Pi OS, armbian 은 PC 에서 사용하는 package manager 방식을 제공하고, Yocto 도 rpm 등을 이용하여 패키지 관리가 가능하다. 이들 패키지 매니저는 패키지 데이타베이스를 업데이트 하고, 패키지 업그레이드 시 의존성 있는 추가 패키지도 다운로드 받아서 설치/삭제하고, 설치 전/후처리를 위한 script를 자동으로 실행시켜서 최종 상태를 만들어 준다.

Port Mirroring 기능 지원 저렴한 스위치 - GS108Ev3

네트워크 프로토콜을 개발 하다보면 Wireshark 등으로 패킷을 캡쳐하여 분석할 일이 종종 생긴다. Linux 장치라면 tcpdump나 wireshark을 실행해서 직접 패킷 캡쳐가 가능하지만, 그렇지 않은 경우에는 Network TAP 이나 이더넷 스위치의 port mirroring 기능을 사용하여서 패킷을 캡쳐하여야 한다. Amazon 등에서 검색해보면 Network Tap 도 $200~300 정도로 비싼 편이고, 포트 미러링와 유사한 기능도 고급 스위치에서만 지원된다. 찾다 보니 Netgear GS108Ev3(8포트), GS105Ev2(5포트) 가 가격도 5~8만원 정도로 비싸지 않고, 포트 미러링 기능이 지원되어 소개한다. 외관은 금속으로 되어 있어 크기에 비하여 무게가 묵직하게 나간다.