기본 콘텐츠로 건너뛰기

cryption-basic

cryption-basic 암호의 기본 의의 A가 B에게 인터넷을 이용하여 데이터를 전달하고자 할 때 그냥 전달항다면 악의를 가진 제 3자가 훔쳐볼 가능성이 있다. 그러므로 암호화한 암호문을 전달하고 전달 받은 B는 이를 복호화하여 원본 데이터를 얻는다. 컴퓨터에서 암호란 컴퓨터는 데이터의 형식과 무관하게 모든 데이터를 0과 1로 구성되는 2진수로 관리한다. 이를 특정 연산을 통해서 컴퓨터가 해석할 수 없는 숫자 형태로 변경하는 것을 의미한다. 암호 수치 연산에는 키를 이용하는 데, 키는 숫자로 구성되어 있으며 암호를 위한 암호키, 복호를 위한 복호키가 있다. 예시 XOR을 이용한 구체적 예시를 살펴보자. XOR은 A ⊕ B = C A \oplus B = C A ⊕ B = C A = B ⊕ C A = B \oplus C A = B ⊕ C 가 성립되는 특징이 있다. 이를 암/복호에 적용하면 다음과 같다. 암호 : O r i g i n a l D a t a ⊕ K e y = C r y p t o g r a m Original Data \oplus Key = Cryptogram O r i g i n a l D a t a ⊕ K e y = C r y p t o g r a m 복호 : C r y p t o g r a m ⊕ K e y = O r i g i n a l D a t a Cryptogram \oplus Key = Original Data C r y p t o g r a m ⊕ K e y = O r i g i n a l D a t a

security-overview

security-overview 보안 개요 도청 대응 방안 : 암호화 기술 A가 B에게 메시지를 전송할 때 경로 상에 있는 X가 메시지 내용을 훔쳐볼 가능성이 있다. 위장 대응 방안 : 메시지 인증 코드, 전자 서명 A가 B에게 메시지를 전달했다고 생각하지만 X가 B로 위장하여 전달받았을 가능성이 있다. B가 A에게 메시지를 받았다고 생각했지만 X가 A로 위장하여 전달했을 가능성이 있다. 변조 대응 방안 : 메시지 인증 코드, 전자 서명 A가 B에게 메시지 전달을 성공했을지라도 도중에 X가 메시지 내용을 변경했을 가능성이 있다. 사후 부인 대응 방안 : 전자 서명 B가 A에게 메시지를 받았다고 생각하지만 A가 악의적으로 이를 부인할 가능성이 있다.

HTML/CSS를 활용하여 카카오톡 클론 만들기

시간을 내어 HTML과 CSS를 공부한 것은 대학생 때가 마지막이었던 것으로 기억한다. 그 동안 사이드 프로젝트로 진행했던 여러 아이디어들을 결국 서비스하지 못했던 결정적인 이유는 프론트 엔드 기술 부족이었다고 생각하고 우선 HTML과 CSS 학습을 진행하였다. 프론트 엔드 기술은 많은 발전을 거듭하여 예전에 비해 큰 복잡성을 가지게 되었다. 빠른 시간 안에 숙지하지 못한 기법들에 대해서 알아보고 구현하고자 하는 아이디어에 활용할 수 있을 정도로 진행해보고자 한다. 또한 보안적 관점에서 발생할 수 있는 프론트 엔드 위협에 대해 파악할 수 있는 좋은 밑거름이 되길 기대해본다. 우선적으로 진행한 카카오 톡 디자인 클론은 노마드 아카데미의 강의를 수강하며 진행하였고 결과는 아래의 링크에서 확인할 수 있다. 소스코드 저장소 구현된 웹 페이지

Ready-to-programming

Ready-to-programming 프로그래밍 기본 환경 구성 정리 프로그래밍을 시작하기 위한 기본 환경 구성 정리 개인적으로 아톰 에디터를 활용한 환경 구성을 선호한다. 다른 에디터에 비해서 풍부한 플러그인과 보기 좋은 UI는 아톰을 선택하기에 충분한 이유가 된다. 설치 플러그인 vim-mode vim-mode-plus vim-mode-plus-ex-mode prettier-atom -> Format Files on Save, Show in Status Bar 설정 pigments minimap git-plus emmet color-picker Vim 타이핑 환경은 매우 효율적이다. 아직 활용도가 낮은 편이지만, 어느정도 적응되고 나면 메모장보다 gvim을 실행하는 자신을 볼 수 있다. 아톰에서도 마찬가지로 vim-mode를 설치하여 Vim 타이핑 환경을 구성하여 사용한다.

Heap-Memory

Heap-Memory 힙 메모리 이해하기 많은 메모리 할당자가 존재한다. dlmalloc - 범용 할당 자 ptmalloc2 - glibc jemalloc - FreeBSD와 Firefox tcmalloc - Google libumem - 솔라리스 모든 메모리 할당자는 빠르고 확장 가능하며 효율적이라고 주장하지만 모든 할당자가 개발하고자하는 어플리케이션에 적합할 수 는 없다. 메모리 사용량이 많은 응용 프로그램의 성능은 메모리 할당자 성능에 크게 좌우된다. 이 글에서는 glibc malloc 할당자에 대해서만 이야기하고자 한다. ptmalloc2 는 dlmalloc 에서 분기되었다. fork 후 스레딩 지원이 추가되어 2006년에 릴리즈되었다. 공식 릴리즈 후 ptmalloc2 는 glibc 소스 코드에 통합되었다. System call 시스템 호출 : malloc 은 내부적으로 brk 또는 mmap 시스템 호출을 한다. Threading 스레딩 : 리눅스 초기에는 dlmalloc 이 기본 메모리 할당자로 사용되었다. 하지만 나중에 ptmalloc2 의 스레딩 지원으로 리눅스 용 기본 메모리 할당자가 변경되었다. 스레딩 지원은 메모리 할당자 성능 및 응용 프로그램 성능을 향상시키는 데 도움이 된다. dlmalloc 에서 두 개의 스레드가 동시에 malloc 을 호출 할 때, freelist 데이터 구조가 사용 가능한 모든 스레드간에 공유되기 때문에 하나의 스레드 만 임계 섹션에 들어갈 수 있었다. 따라서 다중 스레드 응용 프로그램에서 메모리 할당에 시간이 걸리므로 성능 저하를 유발한다. ptmalloc2 에서 두 스레드가 동시에 malloc 을 호출하는 동안 각 스레드는 별도의 힙 세그먼트를 유지하므로 이 힙을 유지하는 freelist 데이터 구조도 분리되어 메모리를 즉시 할당할 수 있다. 각 스레드에 대해 별도의 힙 및 freelist 데이터 구조를 유지하는 이 작업을 스레드 별

요즘 나를 즐겁게 하는 것들

나를 즐겁게 하는 일이 무엇인 가를 살펴보는 것은 내가 어떤 사람인지 깨달을 수 있는 좋은 방법이다. 카페에서 하는 노트북, 세바시 강연, 파이썬 프로그래밍, 수수께끼 같은 신규 취약점은 나를 즐겁게 한다. 목표를 향해 제대로 가고 있는 지 알 수 없지만, 아직 컴퓨터가 나를 즐겁게 한다는 것에 안도감을 느낀다. 잘하고 싶은 마음도 간절하지만, 지금처럼 앞으로도 계속 내가 컴퓨터를 좋아하는 사람이었으면 한다.

Heap-Syscall

Heap-Syscall 힙 메모리 할당과 시스템 호출 malloc 은 OS에서 메모리를 얻기 위해 brk 또는 mmap syscall을 사용하여 메모리를 확보한다. brk brk : brk 는 프로그램 중단 위치를 증가시켜 커널에서 메모리를 얻는다. 처음 시작( start_brk ) 및 힙 세그먼트 끝( brk )은 동일한 위치를 가리킨다. ASLR이 꺼지면 start_brk 및 brk 는 data/bss 세그먼트 ( end_data )`끝을 가리킨다. ASLR이 켜지면 start_brk 및 brk 는 data/bss 세그먼트 ( end_data )끝에 임의의 brk 오프셋을 더한 것과 같다. 위의 프로세스 가상 메모리 레이아웃 그림은 start_brk 가 힙 세그먼트의 시작이고 brk (프로그램 중단)이 힙 세그먼트의 끝임을 보여준다. 예시 /* sbrk and brk example */ # include <stdio.h> # include <unistd.h> # include <sys/types.h> int main ( ) { void * curr_brk , * tmp_brk = NULL ; printf ( "Welcome to sbrk example:%d\n" , getpid ( ) ) ; /* sbrk(0) gives current program break location */ tmp_brk = curr_brk = sbrk ( 0 ) ; printf ( "Program Break Location1:%p\n" , curr_brk ) ; getchar ( ) ; /* brk(addr) increments/decrements program break location */ brk ( curr_brk + 4096 ) ; cu