일방향 해시함수

임의의 길이를 갖는 메세지 입력으로 고정된 길이의 해시값 또는 해시코드라 불리는 값을 출력하는 함수입니다.

서로 다른 두 개의 메세지가 하나의 해시로 출력되는 현상을 '충돌'현상이라고 하며, 이러한 현상을 막기 위해서 '충돌 내성'을 가져야 합니다.

 

  • 해시값을 고속으로 계산할 수 있습니다.
  • 해시값으로부터 메세지를 구할 수 없는 일방향성을 갖습니다.
  • 메세지가 다르면 해시값도 다릅니다.
  • 기본적으로 무결성을 검증, 소프트웨어 변경을 검출할 수 있지만 부인방지는 검출할 수 없습니다.
  • 메시지 인증코드(MAC), 전자서명에 활요됩니다. (인증을 수행하기 위한 기술)
  • 기본적으로 키가 존재하지 않습니다.

 

암호학적 해시 함수 설계시 목적 3가지
역상 저항성(preimage resistance), 제 2 역상 저항성(seconde preimage resistance), 충돌 저항성(collision resistance)
  • 역상 저항성(preimage resistance)

y = h(M)에 대해서 y=h(M`)을 만족하는 M`를 찾아낸다는 것이 매우 어려워야 합니다.

즉, 주어진 결과값에 대해 입력값을 계산하기 어려워야 한다.

 

  • 제 2 역상 저항성(seconde preimage resistance)

주어진 입력값에 대해 충돌쌍(같은 결과값)을 갖는 다른 입력값을 계산하기 어려워야 합니다.

 

  • 충돌 저항성(collision resistance)

충돌쌍(같은 결과값)을 갖는 두 개의 입력값을 계산하는 것이 어려워야 합니다.

 

 

전자서명에 이용되는 해시함수의 특성
  • 해시 값을 고속으로 계산
  • 역상 저항성(preimage resistance)
  • 제 2 역상 저항성(seconde preimage resistance)
  • 충돌 저항성(collision resistance)

 

해시함수의 종류
  • MD(Message Digest)

MD(Message Digest)는 RSA를 개발한 MIT의 Rivest 교수에 의해 개발된 압축 알고리즘으로 MD2, MD4, MD5의 3가지 버전이 있습니다. 

MD2 8비트 컴퓨터에 최적화, 속도가 느림.

MD4 32비트 커퓨터에 사용, 속도는 빠르지만 안정성이 떨어짐.

MD5 MD4에 비해 속도는 떨어지지만 훨씬 더 안정적이어서 폭넓게 사용 됨.

-> 강한 충돌 내성을 공격하는 생일공격(Birthday Attack)에 노출되어 보안 요구사항이 높은 응용 분야에서는 사용이 권장되지 않고 있습니다.

 

  • SHA(Secure Hash Algorithm)

MD4기반으로 개발되었습니다. 취약점 발견으로 SHA-1(FIPS PUB 180-1)이 발표되었으며 512비트 블록을 160비트 MD로 출력하는 해시함수로 SHA함수군 중 가장 많이 사용되며 TLS,SSL, PGP, SSH 등 다양한 보안 프로토콜과 프로그램에서 사용되고 있습니다. 

 

  • TIGER

64비트 시스템에 사용하기 위해 개발된 암호화 해시함수로 MD5 및 SHA-1보다 속도가 더 빠릅니다.

 

  • HAS160(Hash Function Algorithm Standard 160)

한국형 전자서명 표준인 KCDSA에서 사용할 목적으로 개발된 암호화 해시 알고리즘으로, 512비트의 메시지 블록으로부터 160비트의 해시코드를 출력하는 32비트 시스템에 맞게 설계된 Little Endian 구조의 해시함수입니다.

 

항목 MD5 SHA-1 RIPEMD-160
다이제스트 길이 128비트 160비트 160비트
처리 단위 512비트 512비트 512비트
단계수 64(16번의 4라운드) 80(20번의 4라운드) 160(16번의 5병행 라운드)
최대 메시지 크기 무한 2의 64승 -1 2의 64승 -1
앤디언 Little-endian Big-endian Little-endian2

 

암호화 해시함수의 활용
  • 무결성 점검

암호화 해시함수는 해시값의 비교를 통해 메시지 또는 문서가 변경되었는지 여부를 판별함으로써 무결성 점검을 위해 사용됩니다.

 

  • 소프트웨어 변경 검출

전달받은 소프트웨어가 원본과 동알한 지 여부를 확인하기 위하여 해시함수를 사용할 수 있습니다. 즉, 소프트웨어를 다운로드한 후 해시값을 계산하고 이를 원본 페이지에서 제공하는 해시값과 비교하여 소프트웨어가 변조되었는지 검출합니다.

 

  • 메시지 인증코드

키가 있는 해시함수(Keyed Hash Function)를 사용하는 경우 메시지의 무결성 외에 송신자와 수신자 간의 비밀키를 이용하여 메시지 인증을 수행할 수 있습니다.

 

  • 전자서명

전자서명에서도 일방향 해시함수가 사용됩니다.

 

해시함수에 대한 공격
  • 무차별 공격

'약한 충돌 내성'을 깨고자 하는 공격으로 메시지 다이제스트의 크기가 160비트인 경우 2^160회를 시도하면 원하는 메시지를 찾을 수 있습니다.

 

  • 일치블록 연쇄공격

사전에 새로운 메시지 M`를 다양하게 만들어 놓았다가 공격하고자 하는 메시지 M의 해시값 h(M)과 같은 해시값을 가지는 것을 골라 사용하는 공격입니다.

 

  • 중간자 연쇄공격

전체 해시값이 아니라 해시 중간 결과에 대한 충돌쌍을 찾습니다.(특정 포인트를 공격대상)

 

  • 고정점 연쇄공격

메시지 블록과 연쇄변수 쌍을 얻게 되면 연쇄변수가 발생하는 특정한 점에서 임의의 수의 동등한 블록들을 메시지 중간에 삽입해도 전체 해시값이 변하지 않습니다.

 

  • 차분 연쇄공격

다운 라운드 블록암호의 공격 : 다중 라운드 블록암호를 사용하는 해시값과 그에 대응하는 출력값의 통계적 특성을 조사하는 기법입니다.

해시함수의 공격 : 압축함수의 입출력 차이를 조사하여 0의 충돌쌍을 주로 찾아내는 방법을 사용 합니다.

 

 

파일시스템 관리

파일시스템 연결(mount)

보조기억자이체 들어 있는 데이터를 읽어 오고, 여기에 저장하려면 먼저 해당 장치를 UNIX 시스템에 연결하는 작업이 필요합니다.

mount명령은 보조기억장치에 설치된 파일시스템을 UNIX 시스템이 인식하도록 특정 디렉터리에 논리적으로 연결시켜 주도록 합니다.

 

mount [-option] [device | mount_point]

#mount -a                                               /* /etc/fstab 파일을 기반으로 명시적으로 실행 */

#mount /dev/cdrom /mnt/cdrom.         /* /dev/cdrom 디바이스 파일(CD-ROM)을 /mnt/cdrom 디렉터리에 마운트 */

 

파일시스템 연결해제(umount)

umount 명령은 이전에 마운트 된 파일시스템의 연결을 해제합니다.

프로세스가 파일시스템에 있는 파일을 사용 중이거나 사용자가 파일시스템의 디렉터리에 있다면 umount 명령은 device is busy 메세지와 함께 실패합니다.

/etc/fstab 파일은 시스템에 마운트 된 파일시스템의 정보를 관리합니다. mount 명령을 실행하면 파일시스템이 마운트 정보를 /etc/mtab 파일에 기록하고, umount는 정보를 삭제합니다.

 

프로세스 스케줄 관리

정기적 스케줄 관리(cron)

cron 데몬 프로세스는 UNIX 시스템에서 정기적인 작업을 지정시간에 처리하기 위해 사용합니다.

cron 데몬 프로세스로 처리하는 것이 더 나은 프로세스는 다음과 같은 특징을 갖습니다.

일괄적으로 처리해야 하는 작업(특히 몰아서 하는 야간작업)의 경우

작업에 대한 요구가 불규칙하지 않은 경우

cron 데몬 프로세스를 사용하려면 다음 세 가지 구성요소가 필요합니다.

정기적으로 처리할 작업 목록을 정의한 crontab 파일

crontab 파일을 제어(편집)하는 crontab 명령

crontab 파일을 읽어서 내용에 정의된 대로 작업을 처리하는 cron 데몬 프로세스

cron 데몬 프로세스는 UNIX 시스템에서 기본적으로 지원하는 데몬 프로세스이므로 사용자는 crontab 명령으로 작업목록을 정의하는 방법만 이해하면 됩니다.

 

crontabl -l

20 6 * * 1-5 /work/batch_job parm1

/* 매월 매일 월~금요일 오전 6시 20분에 /work/batch_job 명령을 param1인수와 함께 실행 */

 

crontab 파일은 사용자 계정별로 만들어진다.

시스템관리자인 root는 login_name을 명시적으로 사용하여 다른 사용자의 crontab 파일을 편집할 수 있으며, 일반 사용자는 자신의 crontab 파일만 편집할 수 있습니다.

 

프로세스 응용

첫 번째 프로세스

어떤 프로그램 OO을 실행하는 새로운 프로세스를 생서하는 시스템 호출은 없다. 대신 유닉스에서 기존의 프로세스를 복제하여야 함. 그리고 새로 생성된 자식 프로세스를 실행 파일 OO과 연관 시킵니다.

 

프로세스 id(PID)가 0인 swapper라는 첫 번재 프로세스는 부팅 시간 동안 운영체제에 의해서 생성 됩니다. 이 프로세스는 즉시 PID 1과 2를 가지는 2개의 프로세스 init와 pagedaemon을 만들기 위하여 fork / exec 를 두 번 실행한다.

 

스와퍼(swapper)와 페이지 데몬(pagedaemon)과 같은 프로세스는 그 중요성 때문에 커널 모드에서 영구적으로 실행되며 이들을 커널 프로세라고 합니다.

시스템 내의 모든 다른 프로레스들은 init프로세스의 자손들이 됩니다.

 

프로세스의 생성 및 종료와 관련된 두 가지 규칙

1. PID가 0인 프로세스를 제외한 모든 프로세스는 실행 중에 부모 프로세스를 갖게 됩니다.

  만일 부모 프로세스가 자식 프로세스보다 먼저 종료될 경우 자식 프로세스는 고아 프로세스가 되지만, UNIX 시스템의 규칙에 따라 PID가 1번인 init프로세스가 고아 프로세스(Orphan process)의 대리모 역할을 하게 됩니다.

 

2. 프로세스 종료 시 자신을 생성한 부모 프로세스에게 자신의 종료를 알립니다.

  프로세스가 종료되었지만 부모 프로세스가 이를 확인하지 않았다면(즉, 부모가 살아있으면서) 종료된 자식 프로세스는 부모 프로세스의 확인이 있을 때까지 좀비 프로세스로 남게 됩니다.

 시스템/커널 입장에서 프로세스는 제한된 자원이므로 좀비 프로세스가 과도하게 많아지면 더 이상 프로세스를 생성하지 못하는 문제가 발생할 수 있습니다.

 

* 좀비 프로세스(Zombie process)

실제로 실행되진 않지만, 프로세스 목록을 차지하고 있습니다. 만약 잘못 작성된 프로그램 때문에 좀비 프로세스가 증가한다면 프로세스 테이블이 꽉 차 다른 정상 프로세스를 실행할 수 없게 됩니다. 좀비 프로세스는 kill 명령어로 제거할 수 없습니다. 부모프로세스에게 SIGCHILLD 시그널 보내서 종료 혹은 부모 프로세스가 종료되면 좀비 프로세스는 고아 프로세스가 되고, init 프로세스는 자식 프로세스의 종료 정보를 주기적으로 확인하고 종료하게 됩니다.

 

시스템 시작과 종료

부팅 관련 용어 정의

 

시스템 종료

UNIX 시스템 종료할 때 주의사항

접속 중인 사용자에게 시스템의 종료를 공지하여 작업을 마무리 해야 합니다.

운영 중인 서비스(프로세스)를 안전하게 종료해야 합니다.

하드디스크를 갱신하여 파일 시스템의 무결성을 유지해야 합니다.

 

하드디스크 동기화(sync)

UNIX 시스템은 하드디스크의 입 출력에 대한 효율성을 높이기 위하여 버퍼를 운영합니다.

만일 시스템이 비정상적으로 종료되면 버퍼에 있는 데이터가 하드디스크에 반영되지 않아서 파일시스템에 무결성 문제가 생기게 됩니다. 따라서 하드디스크 동기화는 시스템을 종료하는 중에 해야 할 가장 중요한 작업니다.

유닉스

구분 설명
대화식 운영체제 사용자와 운영체제간의 상호작용은 명령어 해석기인 Shell에 의해 이루어짐
멀티태스킹 여러 개의 명령어를 동시에 처리하는 방식
멀티유저 동시에 여러 사용자가 하나의 컴퓨터를 사용 가능
호환성 및 이식성 하드웨어적인 구조에 독립적으로 응용프로글매을 작성할 수 있는 환경 제공
계층적 파일시스템 계층적 파일시스템은 정보의 고유구조를 반영하도록 그룹화하는 기능으로 파일관리에 상당한 유연성 제공
뛰어난 통신 기능 TCP/IP에 기반한 통신기능을 운영체제 자체에 내장하고 있으며, 프로세스 간을 연결하는 파이프 기능이 있어서 명령어 간의 데이터 전달이 수월
다양한 기능의 유틸리와 개발환경 제공 UNIX 시스템은 수백여 개의 명령어와 유틸리티를 사용자 및 개발자에게 제공하여 도움을 줌

커널

커널은 항상 메모리에 상주하여, CPU, 메인 메모리, 하드디스크 등의 하드웨어 자원을 제어하면서 프로세스 스케줄링, 기억장치관리, 파일관리, 시스템호출 인터페이스(System Call), 입출력서비스 등의 기능을 사용자에게 제공.

커널은 가장 하위수준(Level)에서 하드웨어와 직접 관계한다. 그러므로 커널의 일부분은 특정 컴퓨터 시스템의 하드웨어에 종속적, 그러나 UNIX는 현존하는 어떤 운영체제보다 다양한 종류의 컴퓨터에서 동작하도록 설계되어 있음.

 

 

파일시스템(File System)

디렉터리 구조

디렉터리 내용
/ root 디렉터리나 최상위 디렉터리
/etc 시스템의 환경 설정 및 주요 설정 파일(passwd, hosts 등)
/dev 프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수 파일을 담고 있다.
/usr/bin 기본적으로 실행 가능한 파일을 담고 있다(echo, mv, copy, pwd 등)
/usr/include C언어 라이브러리 헤더 파일이 저장되는 디렉터리
/usr/lib 기본 프로그램의 모듈을 담고 있다.
/usr/sbin 시스템 관리 명령어가 저장되는 디렉터리
/home 사용자 홈 디렉터리가 저장되는 디렉터리
/tmp 프로그램 실행 및 설치 시 생성되는 임시 파일을 담고 있다. 이 디렉터리에 파일을 저장하면 재부팅 시 임의로 삭제될 수 있다.
/var 시스템 로그가 저장되는 디렉터리이다.

파일시스템 구조

파티션에 생성된 파일시스템은 부트 블록(Boot Block), 슈퍼 블록(Super Block), i-node 리스트, 데이터 블록(Data Block)의 네 가지 영역으로 분리된 자료구조를 가짐

 

i-node

i-node(index node)는 유닉스에서 각 파일에 대한 정보를 기억하는 약 120byte의 고정된 크기의 구조체.

일반 파일이나 디렉터리 파일의 i-node는 각 파일의 디스크 블록의 위치를 포함하고 있으며, 특수파일의 i-node는 주변장치를 식별할 수 있는 정보를 포함하고 있다.

 

슈퍼블록

파일시스템의 정보를 유지하는 자료구조. 이런 슈퍼 블록의 정보는 좀더 빠르고 효과적인 파일시스템의 관리 가능

사용하지 않는 디스크 블록과 i-node를 할당받기 위해서 i-node리스트와 데이터 블록을 순차적으로 하나씩 비교하는 방식은 효율적인 방법은 아니다. 따라서 슈퍼블록에는 파일시스템의 요약정보와 함께 사용하지 않고 있는 i-node와 디스크 블록의 위치정보도 가지고 있음

 

파일과 디렉터리 관리

특정 디렉터리에 있는 디렉터리와 파일을 열거하고 추가 옵션으로 이들에 관한 여러가지 정보(크기, 소유주, 만든 시간, 변경 시간, 이름, 접근권한 등)도 알 수 있다. 여기서 ls 명령어는 List의 약자이다.

 

접근권한

Unix운영체제에서는 권한 부여의 대상을 세 종류로 구분

user: 파일을 만든(생성) 소유주

group: 파일을 만든 소유주가 속한 그룹

other: 기타 사용자

접근권한의 종류: 파일이나 디렉터리는 모두 사용자 카테고리로 구분된 접근 권한을 가짐, 접근 권한은 읽기, 쓰기, 실행 권한 등 세 가지로 구성되며, 파일이냐 디렉터리냐에 따라 그 의미가 다름

 

파일 권한 관리

접근권한변경(chmod)

#chmod o-w daemon.c.           /* daemon.c에 대한 other의 쓰기권한을 제거 */

#chmod 664 daemon.com      /* daemon.c의 접근권한은 664(rw-rw-r---) */

 

접근권한을 기호로 기술하는 방법

대상 : u(user), g(group), o(other), a(all)

연산자: +(추가), -(제거), =(지정)

접근권한 : r(read), w(write), x(execute)

 

소유권 또는 그룹 변경(chown/chgrp)

파일이나 디렉터리의 소유주나 그룹을 변경할 때 사용. 명령을 실행하고 나면 파일의 이전 소유주는 해당 파일에 이 명령을 다시 실행할 수 없다.

#chown infosec daemon.c      /* daemon.c 파일의 소유주를 infosec로 변경 */

#chgrp other daemon.c           /* daemon.c 파일의 소유그룹을 other로 변경 */

 

 

보안운영체제

컴퓨터 운영체제상에서 내재된 보안상의 결함으로 인해 발생 가능한 각종 해킹으로부터 시스템을 보호하기 위해 기존 운영체제 내에 보안기능을 통합시킨 보안커널을 추가로 이식한 운영체제

 

정보영역의 분리, 역할기반 영역분리, 최소권한 유지, 커널 레벨의 강제적 접근통제(Mandatory Access Contro)등이 있다.

 

보호대상

 - 메모리

 - 보조기억장치 상의 파일 또는 데이터의 집합

 - 메모리상에서 실행 중인 프로그램

 - 파일들의 디렉토리

 - 하드웨어 장치

 

보호방법

 - 물리적 분리(Physical separation) : 사용자별로 별도의 장비만 사용하도록 제한하는 방법. 강한 형태의 분리이나 실용적이지 않음

 - 시간적 분리(Temporal seperation) : 프로세스가 동일 시간에 하나씩만 실행되도록 하는 방법. 운영체제의 일을 단순화 시킴

 - 논리적 분리(Logical seperation) : 각 프로세스에 논리적인 구역을 지정하는 방법. 자신의 구역안에서 자유, 할당된 구역 밖에선 제한적

 - 암호적 분리(Cryptographic seperation) : 내부에서 사용되는 정보를 외부에서 알 수 없도록 암호화 하는 방법.

 

파일보호기법

무자격 사용자의 프로그램 무단 접근을 막기 위해 그 파일 소유자가 보호장치를 만들어 놓은 것을 말함.

 

바이러스

트로이목마

자신의 실체를 드러내지 않으면서 마치 다른 프로그램의 한 유형인 것처럼 가장하여 활동하는 프로그램

 - 원격조정

 - 패스워드 가로채기

 - 키보드입력 가로채기

 - 시스템 파일 파괴 형태

 

스파이웨어 (Spy + software)

어떤 사람이나 조직에 관한 정보를 수집하는데 도움을 주는 기술

 

애드웨어(Adware)

악의적 활동을 수행하는 것이 아니라 판매 수익을 올리려는 것, 어떤 애드웨어는 보안 및 사적권리 논점들을 발생시킬 수 있는 침입적 수단을 사용.

 

 

1. IP(Internet Protocol)

 

+ Recent posts