C

Crypto Project : 1-5. 암복호화 init, update, final 구현
시작하며 지난 글에서 init, update, final의 개념과 C언어에서 구조체 멤버변수의 접근을 막는 방법 등에 대해 다루었다. 이번 글에서는 이 세개의 인터페이스의 구현을 살펴보겠다. 혹시 이전글을 보고 오지 않았다면 꼭 보고 오는 것을 추천한다. 1. context 구조체를 다루는 함수, new, reset, free 우선 세 개의 함수를 설명하기 전에 지난 글에서 잠깐 봤던 ctx 구조체를 다루기 위해 사용자에게 제공해야 하는 함수에 대해 설명했었다. 이는 구현부로, new로 구조체를 할당해주고, reset은 말그대로 reset, free는 할당한 구조체를 해제해주는 것으로, 이러한 인터페이스를 제공함으로써 사용자가 멤버변수에 접근을 못하더라도 구조체를 이용할 수 있게끔 해야 한다. 2. in..

Crypto Project : 1-4. C언어에서 멤버변수 접근을 막는 방법과 init, update, final의 개념
시작하며 지난 글에선 암호화, 복호화 함수 enc와 dec를 살펴보았다. enc와 dec 모두 input을 받으면 패딩까지 완벽하게 처리하여 output을 내주는 함수였다. 그러나 이 함수에는 약간의 단점이 있는데, 함수를 실행시키면 무조건 암호화, 혹은 복호화를 "완료" 한다는 것이다. 무슨 말이냐면, 우선 패딩처리가 무조건 된다는 것이다. 패딩은 데이터의 마지막에만 붙이는 것을 원칙으로 한다. 즉 이 함수는 반드시 패딩에 대한 처리를 진행하므로 내가 아직 암호화할 데이터가 남아있음에도, 암호문을 완성해버린다는 것이다. 즉 데이터를 분할해서 암호화할 수 없다. 예로, 네트워크 상에서 내가 전송 받을 데이터는 한번에 다 받는 것을 보장할 수 없다. 상대방이 나에게 암호화한 데이터를 전송하고 내가 복호화를..

Crypto Project : 1-3. 암호화, 복호화 함수(enc, dec)
시작하며 지난 글에서 ecb 한블록 암호화를 이용하여 cbc와 ctr 모드의 구현을 살펴보았고, 이제 이 둘을 이용해 제대로 암호화를 진행하는 end, dec 함수의 구현을 살펴보겠다. 이 암복호화 함수는 CBC, CTR 모드 두가지를 지원하며, 암호 알고리즘, 암복호화에 필요한 파라미터 구조체, 암복호화에 필요한 키, 인풋과 아웃풋을 파라미터로 받아 기능을 수행한다. 이전 글에서 다뤘던 cbc, ctr 함수는 패딩처리까지 진행하지 않았고 이 enc, dec에서 마지막에 패딩처리를 해주는 방식이다. 이제 설명을 시작하겠다. 1. 파라미터 어때요..? 뭔가 직접 Doxygen으로 문서화 한걸로 딱 올리니까... 나 좀 있어보이는..... 뭔가 자랑스러운...... 기분좋은... 아무튼 위는 함수 파라미터를..

Crypto Project : 1-2. 블록암호운용모드 ECB를 이용한 CBC, CTR 모드 구현
시작하며 이제부터 본격적으로 크립토 라이브러리의 구현에 대해 다뤄보고자 한다. 암복호화에 관련된 함수들은 openssl을 이용하여 구현하였고 블록암호운용모드에 대한 코드들을 직접 작성하였다. 이 라이브러리에선 CBC와 CTR, 두개의 모드를 지원하였고 CTR은 스트림 암호도 가능한 것으로 알고있으나 여기선 16바이트 블록단위의 암호화 용으로만 사용하였다. 이번 글에선 이 두개의 운용모드를 어떻게 함수로써 구현하였는지 설명하겠다. 1. Concept 이 라이브러리에서 CBC와 CTR을 구현하기 위해 openSSL에서 제공하는 ECB함수를 사용한다. ECB에 패딩을 붙이지 않고 무조건 16바이트의 데이터만 파라미터로 넘겨준다면 정확하게 한 블록을 암호화하는 함수로써 ECB를 사용할 수 있을 것이다. 다음은 ..

Crypto Project : 1-1. i_crypto library - 구조 및 문서화 예시
1. 시작 앞으로 작성할 크립토 프로젝트에서 가장 중요한 부분인 크립토 라이브러리에 대한 글들을 먼저 써보려 한다. 이 라이브러리의 이름은 i_crypto로 지었다. 여기서 i는 그냥 내가 정한 prefix이다. prefix를 붙이는 이유는 여러 이유가 있지만 수많은 암복호화 함수가 enc, dec등으로 네이밍을 할텐데, 이 때 prefix를 붙이지 않으면 이름 충돌이 일어날 수도 있고 이 함수를 내가 만들었다는 것을 확인하기위해 붙였다. i라고 붙인 이유는 별 의미는 없고 그냥 애플을 좋아하는데 iPhone, iPad에서 소문자 i가 이뻐보여서 i로 정하였다. 우선 오늘은 i_crypto 라이브러리의 구성이 어떻게 되어있는지 작성해보겠다. 이 글 이후에는 실제 인터페이스들을 어떻게 구현했는지, 그러면서..
Crypto Project : Prologue
이 프로젝트에 대한 기록을 시작하며 2022년 12월부터 2023년 2월까지 진행한 현장실습은 나에게 많은 것을 배우게 해주었다. 실습에서 실제 보안 개발 업무가 어떻게 이뤄지는지 어깨너머로 배울 수 있었고, 학교에선 배우지 못했던 프로젝트 관리, 배포 등에 대한 내용들도 익힐 수 있었다. 나에게 너무나 많은 것을 가르쳐주신 수석님께 다시 한번 감사의 말씀을 드리고 싶다. 정말 진심으로 가르쳐주신 덕분에 난 이 짧은 시간동안 많은 발전을 이룰 수 있게 되었다. 앞으로 내가 만든 크립토 라이브러리에 대한 기록을 시작하기 앞서, 이 프로젝트가 어떤 요소들을 담고 있는지 이 글에서 간단하게 소개하고자 한다. 깃허브에 간단하게 readme 도 적어놨으니 보면 이 프로젝트를 이해하는데 도움이 될 것 같다. 깃허브..