MAC( Message Authentication Code )

Programming/Security 2009. 12. 10. 11:30
메시지 인증에 사용되는 값인 인증자를 만드는 함수가 Symmetric, MAC, hash function 과 같이 3개의 부류로 나뉜다.

Symmetric 방식은 메시지 전체의 암호문이 인증자로 제공되며, public key 사용시 시간이 (상대적으로) 오래걸리기 때문에 Symmetric 방식을 사용 한다.
MAC, Hash function 은 시간 단축과 안전성에 근접하게 가고자 하는 방법에 속하게 된다.
MAC 은 인증자로서 적용되는 고정된 길이 값을 만드는 메시지 및 비밀키의 공개 함수이다.
Hash function 은 임의 길이의 메시지를 고정된 길이의 해쉬 값으로 대응시키는 공개 함수로서 인증자가 제공된다.

여기서는 MAC에 대해서 자세히 알아보도록 하겠다.
이 방법은 메시지 인증 코드( MAC ) 라고 하는 작게 고정된 크기의 데이터 블록을 만들기 위해서 비밀키를 사용하는 것이다. 이 기법은 A 와 B 라고 하는 두 통신 객체가 비밀키 K를 공유한다고 가정한다. A가 B로 보낼 메시지를 갖고 있을 때 메시지와 키의 함수로써 MAC을 계산한다.

송신자는 Priavte Key 를  메시지, MAC이 변경되지 않고 수신이 되었을 경우, 수신자는 송신자와 같은 방식으로 MAC을 계산하여, 메시지에 붙어 있는 MAC값과 자신이 계산한 MAC값을 비교하여 인증을 할 수 있다.

'Programming > Security' 카테고리의 다른 글

Diffie-Hellman Key Exchange  (0) 2009.12.10
RSA  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23

설정

트랙백

댓글

Diffie-Hellman Key Exchange

Programming/Security 2009. 12. 10. 09:26

1. prime number q 와 primitive root a 가 주어진다.
2. Xa, Xb ( 각자의 private key )를 랜덤으로 선택한다.
3. Ya( public key ) = a ^ Xa mod q 를 계산하여 공개키를 계산한다.
4. 그리고 서로 공개 키를 공유한다.( Ya는 B에게, Yb는 A에게 전송 )
5. Kab = Yb ^ Xa mod q = Ya ^ Xb mod q 를 각자 계산한다. ( Private Key )

'Programming > Security' 카테고리의 다른 글

MAC( Message Authentication Code )  (0) 2009.12.10
RSA  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23

설정

트랙백

댓글

RSA

Programming/Security 2009. 12. 10. 01:45
키 생성 순서

1. 두개의 소수를 랜덤으로 고른다. : p = 17, q = 11
2. n = p * q = 187
3. ∮( n ) = ( p - 1 ) ( q - 1 ) = 160
4. gcd( e, 160 ) = 1 ; choose e = 7 ; e,160 이 서로소인 e값을 선택
5. d * e = 1 mod 160 and d < 160
  d = 23, 23 * 7 mod 160 = 1.  : mod 160 에 mod 160 을 더 연산하더라도 mod 160 과 같다 는 원리를 이용

PU = { e, n } = { 7, 187 } , PR = { d, n } = { 23, 187 }


암/복호화

C(Cipher Text) = M^e mod n
M(Plain Text)   = C^d mod n



침입자는 q, a, Ya, Yb 를 알 수 있고, 이를 통해 Brute force 공격을 해서, Xa, Xb를 알아 낼 수 있다.... 이산 대수를 계산하기 어렵다고 하는데... 내 생각에 이정도 정보를 알아내면 Xa, Xb는 금방 고를 것 같은데... -_-; 당췌 머가 어렵다는 것 인지... 아우..ㅋㅋ

'Programming > Security' 카테고리의 다른 글

MAC( Message Authentication Code )  (0) 2009.12.10
Diffie-Hellman Key Exchange  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23

설정

트랙백

댓글

TSS( Task Statement Segment )

Programming/OS Development 2009. 11. 29. 18:20
테스크 스위칭을 할 때, CPU에서 수행되고 있던 프로그램의 모든 레지스터 값을 일단 보존시키고, 이전에 수행되었다 저장되었던 프로그램의 모든 레지스터값을 CPU에 옮겨 놓아, 멈추었던 부분부터 다시 재개하게 된다. 이 때, RAM상에 모든 레지스터 값을 보존하게 되는데, 이 영역을 TSS 라고 한다.
이 TSS를 지정하는 TSS 디스크립터가 GDT에 지정되어 있어야 한다.

'Programming > OS Development' 카테고리의 다른 글

NASM 설치  (0) 2009.11.22
Makefile 만들기  (0) 2009.11.22
djgpp 설치  (0) 2009.11.22
DMA & PIO  (0) 2009.09.23
클러스터( Cluster )  (0) 2009.09.23

설정

트랙백

댓글

NASM 설치

Programming/OS Development 2009. 11. 22. 21:49

nasm.sourceforge.net 에서 다운 받던지 아니면 아래의 파일을 다운 받도록 하자.


압축을 풀고 이를 d:\nasm 에 옮기도록 하자. 그리고 환경변수를 등록하면 된다.

위와 같이 등록을 하고 난 뒤에 cmd 에서 nasm을 입력하면 아래와 같이 뜨게 되면 제대로 설정이 된 것이다.


이제 컴파일 해보도록 하자.

'Programming > OS Development' 카테고리의 다른 글

TSS( Task Statement Segment )  (0) 2009.11.29
Makefile 만들기  (0) 2009.11.22
djgpp 설치  (0) 2009.11.22
DMA & PIO  (0) 2009.09.23
클러스터( Cluster )  (0) 2009.09.23

설정

트랙백

댓글

Makefile 만들기

Programming/OS Development 2009. 11. 22. 21:37
현재 MPOS 에서 쓰고 있는 makefile 을 가지고 설명을 하겠다.

아래는 전체 makefile 내용이다.
GCC = gcc
ASM = nasm
EFLAGS    = -Iinclude #-Wall # 기타 flag 값
EFLAGSCOFF = -f coff -o  # coff 형식 오브젝트
EFLAGSBIN  = -f bin -o   # binary 파일
OBJS =  mpos.o    \
 mmanager.o  \
 6845crt.o   \
 vsprintf.o  \
 string.o    \
 hal.o     \
 kernel.o   \
 process.o \
 syscall.o \
 kbddrv.o \
 fdddrv.o \
 hshell.o \
 gshell.o \
 fatfs.o  \
 musdrv.o \
 queue.o \
 windows.o \
 eventdriven.o \
 graphic.o \
OBJSCOFF = entry.o \
    hal_asm.o \
    handler.o \
    graphicf.o \
all: mpos_linking  # 내부에 필요한 것들만 남김
 objcopy -R .note -R .comment -S -O binary mpos MPOS.BIN
 del *.o
 del mpos
mpos_linking: mpos_compile # 링킹
 ld -o mpos -Ttext 0x20000 -e _EntryPoint16 $(OBJSCOFF) $(OBJS) hankaku.obj
mpos_compile: clean $(OBJS) # c 컴파일, asm 컴파일
 $(ASM) $(EFLAGSBIN) bootsect.bin asm/bootsect.asm
 $(ASM) $(EFLAGSCOFF) entry.o asm/entry.asm
 $(ASM) $(EFLAGSCOFF) hal_asm.o asm/hal_asm.asm
 $(ASM) $(EFLAGSCOFF) handler.o asm/handler.asm
 $(ASM) $(EFLAGSCOFF) graphicf.o asm/graphicfunc.asm
clean:   # 이전에 컴파일된 오브젝트 파일과 실행 파일 삭제
 del *.o
 del mpos
 del *.bin
.c.o:   # c파일을 오브젝트파일로
 $(GCC) $(EFLAGS) -c $<

이제, 부분적으로 설명하도록 하겠다.

GCC = gcc
ASM = nasm
EFLAGS    = -Iinclude #-Wall # 기타 flag 값
EFLAGSCOFF = -f coff -o  # coff 형식 오브젝트
EFLAGSBIN  = -f bin -o   # binary 파일

이 부분은 매크로 정의로서, C의 define 처럼 GCC, ASM 을 특정 문자열로 바꾸어 주는 것이다. 아래에서 EFLAGS 를 쓰게 되면 -Iinclude 이 치환되는 것이다. 뒤에 #은 주석을 표시 할 때 사용 된다. 아래의 대입문은 설명을 생략하도록 하겠다. 여기서 -I 옵션은 include 할 폴더 경로를 지정해주고, -Wall 은 경고를 최대한으로 체크해 주는 것이다.

all: mpos_linking  # 내부에 필요한 것들만 남김
 objcopy -R .note -R .comment -S -O binary mpos MPOS.BIN
 del *.o
 del mpos

all: 이 top target 으로, 처음 시작 하는 부분이다. mpos_linking label을 찾아 이동하게 된다. 그리고, 아래 부분은 mpos_linking을 따라가서 수행을 한 뒤에 다음에 실행을 하게 되는 명령어 부분이다. del 부분은 파일을 삭제해주는 부분으로 del *.o 는 .o 확장자 파일을 모두 지워준다.

mpos_linking: mpos_compile # 링킹
 ld -o mpos -Ttext 0x20000 -e _EntryPoint16 $(OBJSCOFF) $(OBJS) hankaku.obj

여기서도 먼저 mpos_compile 부분을 먼저 찾아서 수행을 하게 된다. 그리고 나서 ld 명령을 통해 링크를 해주는 부분이다.

mpos_compile: clean $(OBJS) # c 컴파일, asm 컴파일
 $(ASM) $(EFLAGSBIN) bootsect.bin asm/bootsect.asm
 $(ASM) $(EFLAGSCOFF) entry.o asm/entry.asm
 $(ASM) $(EFLAGSCOFF) hal_asm.o asm/hal_asm.asm
 $(ASM) $(EFLAGSCOFF) handler.o asm/handler.asm
 $(ASM) $(EFLAGSCOFF) graphicf.o asm/graphicfunc.asm

clean $(OBJS) 에서 OBJS 매크로를 사용하기 위해서는 $() 를 항상 해주어야한다. clean 은 따라가서 수행을 처리해주고 난뒤에, 아래의 명령어를 통해 asm 파일들을 컴파일 해주게 된다.

clean:   # 이전에 컴파일된 오브젝트 파일과 실행 파일 삭제
 del *.o
 del mpos
 del *.bin

clean 부분은 불필요한 파일들을 삭제해 주는 구문이다.

.c.o:   # c파일을 오브젝트파일로
 $(GCC) $(EFLAGS) -c $<

이 부분은 불분명한 어떤 .c 파일을 어떤 .o 파일로 바꿀 때 사용 하는 것이다. 링크부분에서 object 파일들이 없을 경우에 알아서 .c파일들을 .o 파일로 만들어주게 된다.

이렇게 makefile이 구성되어 있고, 이를 쉽게 실행 하기 위해서 bat 파일을 만든다. Makefile.bat 로 만들어서 메모장으로 이를 열어서 make 와 pause를 입력해 준다. 그러면 이를 실행을 하면 이 폴더에 있는 make 파일에 따라 make를 해주고 마지막에 pause를 하여 결과를 보여준다.

'Programming > OS Development' 카테고리의 다른 글

TSS( Task Statement Segment )  (0) 2009.11.29
NASM 설치  (0) 2009.11.22
djgpp 설치  (0) 2009.11.22
DMA & PIO  (0) 2009.09.23
클러스터( Cluster )  (0) 2009.09.23

설정

트랙백

댓글

djgpp 설치

Programming/OS Development 2009. 11. 22. 21:15
djgpp 다운로드
www.delorie.com/djgpp/ 에 들어가서 다운 받도록 한다.
하지만 지금 사이트가 들어가지지 않는데 문제가 있는것 같다. 사이트가 되면 다시 다운로드 관련해서 업데이트를 해야겠다.

다운이 완료되었으면 unzip32 을 해서 압축을 풀어준다.

D:\djgpp 압축을 풀어주었다면,
환경 변수를 등록해 주어야 한다.



위와 같이 사용자 변수 및 시스템 변수를 추가 및 편집 해준다.

그리고 cmd 에서 gcc라고 입력을 하게 되면 아래와 같은 결과를 보여주면 gcc가 정상적으로 설치 된 것이다.


'Programming > OS Development' 카테고리의 다른 글

NASM 설치  (0) 2009.11.22
Makefile 만들기  (0) 2009.11.22
DMA & PIO  (0) 2009.09.23
클러스터( Cluster )  (0) 2009.09.23
Endian  (0) 2009.09.14

설정

트랙백

댓글

[Kernel 2.6]인터럽트

Programming/Linux 2009. 11. 17. 10:22

Process 가 리눅스 커널의 기능을 호출 할 때는 시스템 콜을 이용
H/W 가 리눅스 커널의 기능을 호출 할 때는 Interrupt 구조를 이용.

리눅스에서는 Interrupt 의 레벨이 없고, 처리 자체를 응답성을 필요로 하는 부분과 필요로 하지 않는 부분으로 나눈다. 응답성이 필요한 부분은 가능한 한 실행 시간을 짧게하여 H/W Interrupt 로 실행. 응답성이 필요하지 않은 부분은 나중에 처리할 수 있도록 정리해 둔다. 이 처리를 Soft Interrupt 라고 한다. 예를 들면 이더넷 드라이버 처리( H/W Interrupt ), TCP/IP 프로토콜 처리( Soft Interrupt )

멀티프로세서에서의 인터럽트
- CPU에 관계없이 모든 Int Handler 를 처리 할 수 있고, 한 CPU가 H/W Int를 처리하는 중이면 가장 부하가 적은 다른 CPU에 Int를 발생시켜 Int Handler를 처리
- 같은 IRQ가 아닌 한 CPU 별로 각각의 H/W Int Handler 를 처리 할 수 있다.

인터럽트 종류
: 외부 장치 인터럽트, 타이머 인터럽트, 프로세서 간 인터럽트( 다른 CPU에 이벤트 통지 ), NMI( 마스크 불가 인터럽트 - 긴급 시 장해 대응 목적 ex - 메모리의 패리티 에러 발생 포착( Data검증 ), 워치독(watchdog : 자체적으로 Cnt를 증가하여 check하다가 어느 값이 되면 reset ), 디버거 강제 실행 등에 이용 )

예외 : 인터럽트와 비슷은 하지만, 인터럽트는 외적 요인에 의한 것이지만, 예외는 CPU의 동작 자체에 의해 일으켜진 이벤트를 뜻한다( 예 : 0으로 나누기, 페이지 접근 위반 등 )

하드웨어 인터럽트 처리 동작 예
1. 네트워크 카드에 패킷 도착시 인터럽트 요청
2. 커널은 인터럽트 핸들러를 실행.
3. 인터럽트 핸들러는 네트워크 카드로 부터 패킷 데이터를 가져와서 소프트 인터럽트 핸들러의 실행을 요청. 인터럽트 핸들러 수행은 마치고, 다음 인터럽트에 대비
4. 잠시 후 소프트 인터럽트 핸들러 실행하여 TCP/IP인 경우 그에 따른 소켓에 패킷을 전송.
5. 프로세스는 소켓으로 부터 데이터를 읽는다.

'Programming > Linux' 카테고리의 다른 글

  (0) 2009.10.26
X 윈도우  (0) 2009.10.26
리눅스 파티션 설정  (0) 2009.10.26
멀티부팅과 파티션  (0) 2009.10.09
시스템 정보 보기  (0) 2009.10.08

설정

트랙백

댓글

Programming/Linux 2009. 10. 26. 10:19
Shell 프롬프트
# echo SHELL
-> echo 는 뒤에 나오는 문자열 출력

# echo $SHELL
-> '$'는 뒷단어를 변수로 인식하고 변수내용 출력

메타문자
- Shell 이 해석하는 특수한 기능을 가진 문자 -> $
- 메타문자 해석 금지 -> \, "", ''
ex ) #echo \$SHELL -> $SHELL 로 출력

배시의 환경설정 파일
- .bash_logout, .bash_profile, .bashrc
- 원본파일 /etc/skel/ 디렉토리에 존재 ( 사용자 추가시 마다 이 원본 파일이 각 사용자의 홈 디렉토리에 복사 된다 - 위치 : /home/사용자명 )
- "." 으로 시작하는 파일은 숨김파일을 의미

모든사용자 공통의 환경설정 파일
- /etc/profile, /etc/bashrc

PATH 환경설정 ( 명령어를 쳤을 때, PATH 에 잡힌 곳에 있는 명령어이면 실행 된다. ) 파일 인식 순서
/etc/profile -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc
( ~/ : 각 사용자별 홈디렉토리 )

'Programming > Linux' 카테고리의 다른 글

[Kernel 2.6]인터럽트  (0) 2009.11.17
X 윈도우  (0) 2009.10.26
리눅스 파티션 설정  (0) 2009.10.26
멀티부팅과 파티션  (0) 2009.10.09
시스템 정보 보기  (0) 2009.10.08

설정

트랙백

댓글

X 윈도우

Programming/Linux 2009. 10. 26. 10:01
리눅스에서는 6개의 가상콘솔 을 제공해 준다.
즉, 6개의 다른 화면을 제공해 준다. 이는 1 ~ 6번이고, 7 번은 기본적으로 X윈도우를 바탕으로 한 화면이 있다. 
Ctrl + Alt + F1 ~ F6 : 텍스트 모드 
Ctrl + Alt + F7 : X윈도우 전환
X윈도우 -> 콘솔 : Ctrl + Alt + BackSpace ( x윈도우 종료 )

텍스트환경에서 X윈도우 구동 명령어
# startx
( 0번째 x윈도우 )
이미 X윈도우가 구동 중일 때
# startx --:1~6
( 7번 X윈도우 환경에서 x윈도우는 0 번째 이다. )

'Programming > Linux' 카테고리의 다른 글

[Kernel 2.6]인터럽트  (0) 2009.11.17
  (0) 2009.10.26
리눅스 파티션 설정  (0) 2009.10.26
멀티부팅과 파티션  (0) 2009.10.09
시스템 정보 보기  (0) 2009.10.08

설정

트랙백

댓글