짤막한 이야기
-
[2021/02/28][짤막한 이야기 - 하이브리드 암호시스템]짤막한 이야기 2021. 2. 28. 12:07
[2021/02/28][짤막한 이야기 - 하이브리드 암호시스템] 대칭키 암호는 동일한 키로 암호화 및 복호화를 수행하며, 비대칭키는 암호화 키와 복호화 키가 따로 존재한다. 간단하게 생각하면 비대칭키 암호시스템으로 암호화하는 것이 더 간편해보인다. 왜냐하면 대칭키 암호시스템에서는 복호화를 하기 위해서 사전에 “키 교환”이 이루어져야 하기 때문이다. 그러나 비대칭키 암호시스템은 수학적인 문제로 접근하기 때문에, 암호화 및 복호화에 소요되는 시간이 매우 크다. 그래서 교환하고 싶은 메시지의 길이가 길수록 비대칭키 암호시스템은 비효율적이게 된다. 위와 같은 각 암호시스템의 한계점을 보완하기 위하여 제안된 암호시스템이 “하이브리드 암호시스템”이다. 이는 메시지의 암호화 및 복호화는 대칭키 암호시스템으로 수행하고..
-
[2021/02/27][짤막한 이야기 - 대칭키 & 비대칭키]짤막한 이야기 2021. 2. 27. 16:26
[2021/02/27][짤막한 이야기 - 대칭키 & 비대칭키] “대칭키(Symmetric Key)”는 암호화할 때 사용하는 키와 복호화할 때 사용하는 키가 서로 같은 경우를 의미한다. “비대칭키(Asymmetric Key)”는 암호화할 때 사용하는 키와 복호화할 때 사용하는 키가 서로 다른 경우를 의미한다. 비대칭키에서는 암호화할 때 사용하는 키는 외부에 공개되어도 문제가 되지 않는다. 따라서 비대칭키를 사용하는 암호를 “비대칭키 암호”라고도 하지만 “공개키 암호”라고도 한다. 대칭키에서 사용되는 키는 보통 랜덤한 비트열을 의미하지만, 비대칭키에서 사용되는 키는 수학적으로 접근하여 생성되는 키이다. 즉, 비대칭키 암호에서 “암호화 키(=공개키)”와 “복호화 키(=비밀키)”는 따로 랜덤하게 생성하는 것은 ..
-
[2021/02/25][짤막한 이야기 - 제어흐름 평탄화]짤막한 이야기 2021. 2. 25. 20:55
[2021/02/25][짤막한 이야기 - 제어흐름 평탄화] “제어흐름 평탄화(Control-Flow Flattening)”은 제어흐름을 이해하기 어렵게하는 보호 기술 중 하나이다. 즉, 역공학을 방지하는 기술 중 하나이며, 이러한 기술을 “난독화(Obfuscation)”라고 한다. 난독화 기술 중 하나의 범주인 “제어흐름 난독화(Control-Flow Obfuscation)”에 해당한다. 단순한 “Hello World!”를 출력하는 코드를 실행 순서를 파악하기 어렵게 한다. 위 예시에서는 평탄화되는 코드 블록의 수가 2개밖에 되지 않지만, 만약 이것이 200개, 2000개로 분할된다면 분석하기 더욱 어려워질 것이다. 이 난독화의 적용 결과로 직렬로 내려가야 하는 제어흐름이 피라미드 형태로 퍼지게 되었다...
-
[2021/02/24][짤막한 이야기 - 안티디스어셈블]짤막한 이야기 2021. 2. 24. 17:26
[2021/02/24][짤막한 이야기 - 안티디스어셈블] “안티디스어셈블(Anti-Disassemble)”은 말 그대로 디스어셈블을 방해하기 위한 기술이다. “디스어셈블러”는 기계어를 읽어들여서 어셈블리어를 출력해주는 분석용 도구(Ex: IDA)이다. 그런데 소스코드 앞에 전혀 실행되지 않는 바이트(예시에서는 0xE8)를 삽입하는 것으로 어셈블리어의 출력을 방해할 수 있다. 전혀 실행되지 않는 바이트는 단순히 삽입하는 것이 아니라 JZ(Jump if Zero) 어셈블리어를 추가하여야 한다. XOR 어셈블리어와 JZ 어셈블리어를 조합하면 “조건분기문”을 “무조건분기문”으로 만들 수 있기 때문에 안티디스어셈블에 많이 활용된다. 소스코드에 단순히 위와 같이 추가하는 것만으로도 디스어셈블러를 방해할 수 있다. ..
-
[2021/02/23][짤막한 이야기 - 공학 & 역공학]짤막한 이야기 2021. 2. 23. 16:23
[2021/02/23][짤막한 이야기 - 공학 & 역공학] 기능성과 명세를 가지고 소프트웨어를 구성하는 과정을 “소프트웨어 공학”이라고 한다. 반대로 소프트웨어에서 기능성과 명세를 파악하는 과정을 “소프트웨어 역공학”이라고 한다. 오늘은 소프트웨어 생성 과정에서의 공학과 역공학을 이야기하려고 한다. 그전에 잠깐, “소스코드”는 이른바 “원시코드”라고도 불리며, “바이너리”는 이른바 “목적코드”라고도 불린다. (※ 단, 영문으로는 소스코드와 원시코드 모두 Source Code로 표기된다.) 원시코드를 입력으로 하여 목적코드를 출력하는 과정을 “컴파일”이라고 한다. 반대로 목적코드를 입력으로 하여 원시코드를 출력하는 과정을 “디컴파일”이라고 한다. 원시코드와 목적코드 사이에는 중간 정도의 입장인 언어가 하나..
-
[2021/02/18][짤막한 이야기 - 동적 분석 & 정적 분석]짤막한 이야기 2021. 2. 18. 12:59
[2021/02/18][짤막한 이야기 - 동적 분석 & 정적 분석] 프로그램에서 기능성과 명세를 파악하는 과정을 역공학(Reverse Engineering)이라고 한다. 역공학을 위한 분석 기법은 “동적 분석”과 “정적 분석”으로 나눌 수 있다. “동적 분석”이란 분석 대상 프로그램을 실행하면서 분석하는 방법이다. “정적 분석”이란 분석 대상 프로그램을 실행하지 않으면서 분석하는 방법이다. 가장 대표적인 차이점은 “프로그램의 실행 여부”인 것이다. 그림과 같은 동굴에 사람(연두색)이 들어가는 경우, 오른손을 벽에 짚고 걸으면 언젠가는 출구로 나오게 된다. 이를 “우수법(右手法)”이라고 한다. 이 경우 지나온 출구에 나온 사람은 동굴 내부를 모두 탐험한 것일까? 그렇지 않을 것이다. 반면 동굴의 위에서 내..
-
[2021/02/15][짤막한 이야기 - 충돌 저항성 & 메시지 인증]짤막한 이야기 2021. 2. 15. 11:40
[2021/02/15][짤막한 이야기 - 충돌 저항성 & 메시지 인증] 해쉬 함수에서 공격자가 충돌쌍을 쉽게 생성할 수 있다면, 메시지의 무결성을 확인하는 과정에서 문제가 될 수 있다. 충돌쌍으로 공격할 수 있는 시나리오는 다수 존재하지만, 역상으로 공격하는 것에 비하여 그 수가 적은 편에 속한다. 메시지 인증이란 보통 두 가지 목적을 가지고 수행된다. 첫번째는 지금 보내는 메시지가 올바른 개체에게서 온 것인지 확인하는 목적(근원 검증)이다. 두번째는 지금 보내는 메시지가 올바른 내용을 가지고 있는지 확인하는 목적(무결성 검증)이다. 충돌쌍을 쉽게 생성할 수 있는 “이브(Eve)”라면 전혀 다른 내용의 두 메시지를 생성할 수 있다. 그리고 두 메시지가 같은 해쉬값(충돌쌍)을 가지도록 조절하여 “앨리스(A..
-
[2021/02/10][짤막한 이야기 - 역상 저항성 & 개체 인증]짤막한 이야기 2021. 2. 10. 10:46
[2021/02/10][짤막한 이야기 - 역상 저항성 & 개체 인증] 해쉬 함수에서 공격자가 역상을 쉽게 계산할 수 있다면, 인증 시스템에서 문제가 될 수 있다. 패스워드를 이용한 인증 시스템에서 해쉬 함수를 사용하기 때문이다. 즉, “유저(User)”가 “인스타그램 서버(Instagram Server)”에 패스워드를 보낼 때 평문 형태(LootNiP)가 아닌 패스워드의 해쉬값(&*%)을 전송하는 것이다. 전송되는 해쉬 값을 “이브(Eve)”가 획득하더라도 “역상 저항성”에 의하여 패스워드를 알 수 없다. 또한 “제2역상 저항성”에 의하여 패스워드를 모르는 상태에서 동일한 해쉬값을 만드는 입력값(또 다른 패스워드)을 추측하는 것도 어렵다. 따라서 “(제2)역상 저항성”을 만족하지 않는 해쉬 함수는 패스워..