openssl

    Crypto Project : 1-5. 암복호화 init, update, final 구현

    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-2. 블록암호운용모드 ECB를 이용한 CBC, CTR 모드 구현

    Crypto Project : 1-2. 블록암호운용모드 ECB를 이용한 CBC, CTR 모드 구현

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