SHA-256 해시함수에대한 소스코드활용매뉴얼

Similar documents
Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

B.3 JDBC 설치 JDBC Java DataBase Connectivity 는자바에서 DBMS의종류에상관없이일관된방법으로 SQL을수행할수있도록해주는자바 API Application Program Interface 다. 이책에서는톰캣과 SQL Server 간의연결을위

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

슬라이드 1

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - additional01.ppt [호환 모드]

슬라이드 1

server name>/arcgis/rest/services server name>/<web adaptor name>/rest/services ArcGIS 10.1 for Server System requirements - 지

PowerPoint 프레젠테이션

Windows 8에서 BioStar 1 설치하기

금오공대 컴퓨터공학전공 강의자료

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PowerPoint 프레젠테이션

NTD36HD Manual

tiawPlot ac 사용방법

Microsoft PowerPoint - Java7.pptx

Spring Boot

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

gnu-lee-oop-kor-lec06-3-chap7

gcloud storage 사용자가이드 1 / 17

슬라이드 1

Microsoft Word - src.doc

02 C h a p t e r Java

게시판 스팸 실시간 차단 시스템

슬라이드 1

Microsoft PowerPoint - [Practice #1] APM InstalI.ppt

슬라이드 1

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

Spring Boot/JDBC JdbcTemplate/CRUD 예제

JDK이클립스

Microsoft PowerPoint - chap01-C언어개요.pptx

윈도우시스템프로그래밍

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

슬라이드 1

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

PowerPoint 프레젠테이션

Interstage5 SOAP서비스 설정 가이드

MaxstAR SDK 2.0 for Unity3D Manual Ver

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

PowerPoint 프레젠테이션

에접속하여상단메뉴에서 [DOWNLOADS] 를클릭한다. 다운로드페이지에서 Java 카테고리에있는 [Java SE] 를클릭하고페이지가바뀌면 [Java Platform (JDK)] 를클릭한다. JDK 버전은다운로드하는시점에따라다를수

슬라이드 1

Chapter 1

PowerPoint 프레젠테이션

PowerPoint Presentation

슬라이드 1

BMP 파일 처리

Microsoft PowerPoint - 03-TCP Programming.ppt

슬라이드 1

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

윈도우시스템프로그래밍

슬라이드 1

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

MF3010 MF Driver Installation Guide

PowerPoint 프레젠테이션

MF5900 Series MF Driver Installation Guide

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

PowerPoint 프레젠테이션

1. 도구개요 CppUnit Testing 소개 CppUnit 는 C++ 용 testing Framework 로 Java 의 JUnit 을 C++ 로구현 C++ 언어에서사용할수있도록개발된 Open Source 프로젝트로, source code 의특정 Module 이의도

비긴쿡-자바 00앞부속

Microsoft PowerPoint - 04-UDP Programming.ppt

rmi_박준용_final.PDF

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint 프레젠테이션

블로그_별책부록

chapter1,2.doc

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Install stm32cubemx and st-link utility

Microsoft PowerPoint - XUSB_제품메뉴얼_140206

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

데이터베이스_오라클_부록(최종).indd

Title Here

Facebook API

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Dropbox Forensics

슬라이드 1

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

슬라이드 1

Microsoft Word - Modelsim_QuartusII타이밍시뮬레이션.doc

PowerPoint Template

Microsoft PowerPoint - 6.pptx

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

Network Programming

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

DLL(Dynamic Linked Library)

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint 프레젠테이션

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

Transcription:

SHA-256 해시함수에대한 소스코드활용매뉴얼 2013.12. - 1 -

제 개정이력 순번 제 개정일 제 개정내역 담당자 해시함수에대한소스코드활용 매뉴얼 김기문 - 2 -

< 목차 > 1. 개요 4 2. 해시알고리즘 4 3. 응용프로그램 5 3.1 C/C++ 5 3.1.1 프로젝트생성및빌드 5 3.1.2 소스코드설명 9 3.2 Java 11 3.2.1 프로젝트생성및빌드 11 3.2.2 소스코드설명 14 4. 웹프로그램 16 4.3 ASP 16 4.3.1 소스코드추가 16 4.3.2 소스코드설명 16 4.4 JSP 18 4.4.1 소스코드추가 18 4.4.2 소스코드설명 18 4.5 PHP 20 4.5.1 소스코드추가 20 4.5.2 소스코드설명 20 [ 부록 ] 참조구현값 22-3 -

1. 개요 SHA(Secure Hash Algorithm) 는인터넷뱅킹, 전자서명, 메시지인증코드, 키교환알고리즘, 키 생성알고리즘등다양한분야의보안프로토콜에사용이된다. SHA 해시함수는단방향암호화로서암 호화된값을복호화하지못한다. 본매뉴얼은 SHA256 소스코드를보다쉽게활용할수있도록소스코드에대한설명과함께사용시 주의사항을다룬매뉴얼이다. 2. 해시알고리즘 해시함수는임의길이의정보를입력으로받아, 고정된길이의암호문 ( 해시값 ) 을출력하는암호기술로암호화된정보는복호화가불가능한특징을가지고있다. 따라서해시함수를이용하면아래와같이비밀번호를입력하여암호문 ( 해시값 ) 을생성해낼수는있지만, 암호문 ( 해시값 ) 을가지고원래의비밀번호를알아낼수는없다. 즉, 개인정보처리자도시스템에저장된암호문 ( 해시값 ) 을가지고원래의사용자비밀번호를알수없기때문에안전한비밀번호관리가가능해진다. < 해시함수의개념 > - 4 -

3. 응용프로그램 Windows, Linux 등다양한운영체제환경에서응용프로그램을개발과함께암호화를적용할수있도록해시함수에대한소스코드를개발하였습니다. 기본적으로많이사용하는 C/C++ 및 Java에대한소스코드설명이제공된다. 3.1. C/C++ 프로젝트생성및소스추가, 빌드등배포되는소스코드를이용하여해시를실행하는방법에대해서 는 Microsoft 社의 Visual studio 2008 을활용하여설명하도록한다. 3.1.1 프로젝트생성및빌드 Visual studio 를실행하여 Win32 콘솔응용프로그램 을선택한다. 이름에는프로젝트명을기입하 고위치에는생성시키고자하는곳의위치를지정하여준다. 콘솔응용프로그램 으로선택한후마침버튼을누르면콘솔형태의프로젝트가생성된다. 미리컴 파일된헤더를체크해주면 int _tmain( int argc, TCHAR *argv[] ) 을자동으로생성시켜준다. 빈프로젝트는말그대로아무것도없는것으로직접헤더파일과소스파일을추가하여전부작성하는 것이다. 여기서는미리컴파일된헤더를사용하여프로젝트를구성하도록한다. - 5 -

프로젝트생성이완료되면 콘솔응용프로그램 을작성할수있도록기본적인.h 와.cpp 의파일들을 생성된다. KISA_sample.cpp 의 _tmain 함수내에서암호화 / 복호화소스를활용하도록한다. 프로젝트생성이완료된후, KISA_sample 프로젝트하위로 SHA256 폴더를추가하도록한다. - 6 -

KISA 에서배포하는소스코드 KISA_SHA256.c 및 KISA_SHA256.h 파일을드래그앤드롭하여해 당폴더로복사한다. 프로젝트속성에서 C/C++ 의추가포함디렉터리항목에포함시킨헤더와소스파일이있는폴더의절대경로또는상대경로를포함시켜야한다. Visual studio에서제공되는매크로함수를이용한상대경로를추가하였다. 매크로관련해서는도움말을이용하고여기서는따로설명을하지않는다. 여러개의폴더또한포함시킬수있으며구분자는 ";" 로하여연속하여기입하면된다. - 7 -

또한, 고급에서컴파일러옵션을 "C 코드로컴파일 (/IC)" 로변경한다. C++ 로해도컴파일이가능하나 배포되는소스코드가 C 이므로 C 컴파일러로구성하도록한다. 마지막으로.c 파일의경우 미리컴파일된헤더사용안함 으로설정하면초기빌드할수있는환 경이다갖추어졌다. - 8 -

3.1.2 소스코드설명 함수설명 void SHA256_Encrypt( IN const BYTE *pszplaintext, IN UINT pszmessage, OUT BYTE *pszdigest ); SHA256_Init, SHA256_Process, SHA256_Close 함수를내부적으로모두호출하여간편한인터페이스를 제공하기위한함수 pszmessage uplaintextlen pszdigest 입력메시지의포인터변수 입력메시지의바이트길이 SHA-256 해시값을저장할포인터변수 참고 : 1. IN 사용자가입력해야할매개변수를의미한다. 2. OUT 함수호출후값이채워지는매개변수를의미한다. void SHA256_Init( OUT SHA256_INFO *Info ); 연쇄변수와길이변수를초기화하는함수 Info SHA256_Process 호출시사용되는구조체 참고 : 1. IN 사용자가입력해야할매개변수를의미한다. 2. OUT 함수호출후값이채워지는매개변수를의미한다. - 9 -

void SHA256_Process( OUT SHA256_INFO *Info, IN const BYTE *pszmessage, IN UINT udatalen ); 임의의길이를가지는입력메시지를 512 비트블록단위로나누어압축함수를호출하는함수 Info pszmessage udatalen SHA-256 구조체의포인터변수 입력메시지의포인터변수 입력메시지의바이트길이 참고 : 1. IN 사용자가입력해야할매개변수를의미한다. 2. OUT 함수호출후값이채워지는매개변수를의미한다. void SHA256_Close( OUT SHA256_INFO *Info, OUT BYTE *pszdigest ); 메시지덧붙이기와길이덧붙이기를수행한후마지막메시지블록을가지고압축함수를호출하는함수 Info pszdigest SHA-256 구조체의포인터변수 SHA-256 해시값을저장할포인터변수 참고 : 1. IN 사용자가입력해야할매개변수를의미한다. 2. OUT 함수호출후값이채워지는매개변수를의미한다. 테스트화면 - 10 -

3.2. Java 다음은 Java 형태의프로그램을하나생성하여헤더및소스와파일추가하는방법과빌드하는방법 등을설명한다. 3.2.1 프로젝트생성및빌드 Eclipse 를실행하여하기이미지처럼 Java 프로젝트를선택한다. Next 를클릭하여 Project name 에는프로젝트명을기입한다. "Use default JRE" 를선택후 Finish 버튼을눌러프로젝트생성을완료한다. - 11 -

소스가있는폴더로이동하여프로젝트에추가할파일을드레그 & 드롭으로프로젝트로이동시킨다. 이 때 Copy files and folders 를선택하여복사하여준다. 테스트클래스를생성하여배포중인소스를사용할수있도록구성한다. 먼저, src 폴더를마우스로 우클릭하여 New -> Class 를선택한다. - 12 -

다음으로는 Package 와 Name 을입력후 Finish 버튼을클릭하여테스트클래스를생성한다. 생성된빈클래스안에아래와같이메인함수를추가후작업을하면된다. public static void main(string[] args) throws Exception { } - 13 -

3.2.2 소스코드설명 함수설명 public static void SHA256_Encrypt( byte[] pszmessage, int uplaintextlen, byte[] pszdigest ) SHA256_Init, SHA256_Process, SHA256_Close 함수를내부적으로모두호출하여간편한인터페이스를 제공하기위한함수 pszmessage uplaintextlen pszdigest 입력메시지의포인터변수 입력메시지의바이트길이 SHA-256 해시값을저장할포인터변수 public static void SHA256_Init( SHA256_INFO Info ) 연쇄변수와길이변수를초기화하는함수 Info SHA256_Process 호출시사용되는구조체 public static void SHA256_Process( SHA256_INFO Info, byte[] pszmessage, int udatalen ) 임의의길이를가지는입력메시지를 512 비트블록단위로나누어압축함수를호출하는함수 Info pszmessage udatalen SHA-256 구조체의포인터변수 입력메시지의포인터변수 입력메시지의바이트길이 public static void SHA256_Close( SHA256_INFO Info, byte[] pszdigest ) 메시지덧붙이기와길이덧붙이기를수행한후마지막메시지블록을가지고압축함수를호출하는함수 Info pszdigest SHA-256 구조체의포인터변수 SHA-256 해시값을저장할포인터변수 - 14 -

테스트화면 - 15 -

4. 웹프로그램 Data Base, Homepage 등다양한 Web Service 환경에서전송 저장되는구간의암호화를적용할수있도록국산암호소스코드를개발하였습니다. 기본적으로많이사용하는 ASP, JSP, PHP를기반으로소스코드등활용방법에대하여설명한다. 4.1. ASP 소스활용등배포되는소스코드를이용하여해시함수를실행하는방법에대해서는간단한에디터상 태에서설명하도록한다. 단, Windows Server 및 IIS 설정에대한설명은생략하기로한다. 4.1.1 소스코드추가 해시함수에대한소소코드가작성된파일을사용하고자하는파일에포함시킨다. 4.1.2 소스코드설명 함수설명 Public Function SHA256_Encrypt(sMessage) SHA256_Init, SHA256_Process, SHA256_Close 함수를내부적으로모두호출하여간편한인터페이스를 제공하기위한함수 smessage 입력메시지변수 - 16 -

Public Function SHA256_Init() 연쇄변수와길이변수를초기화하는함수 Private Function SHA256_Process(sMessage) 임의의길이를가지는입력메시지를 512 비트블록단위로나누어압축함수를호출하는함수 smessage 입력메시지 Public Function SHA256_Close(HASH, M) 메시지덧붙이기와길이덧붙이기를수행한후마지막메시지블록을가지고압축함수를호출하는함수 HASH M SHA256_Init 호출하여초기화된변수 SHA256_Process 로생성된변수 테스트페이지 - 17 -

4.2. JSP 소스활용등배포되는소스코드를이용하여해시함수를실행하는방법에대해서는간단한에디터상 태에서설명하도록한다. 단, 운영체제환경및 Tomcat 설정에대한설명은생략하기로한다. 4.2.1 소스코드추가 해시함수에대한소소코드가작성된파일을사용하고자하는파일에포함시킨다. 4.2.2 소스코드설명 함수설명 public static void SHA256_Encrypt( byte[] pszmessage, int uplaintextlen, byte[] pszdigest ) SHA256_Init, SHA256_Process, SHA256_Close 함수를내부적으로모두호출하여간편한인터페이스를 제공하기위한함수 pszmessage uplaintextlen pszdigest 입력메시지의포인터변수 입력메시지의바이트길이 SHA-256 해시값을저장할포인터변수 - 18 -

public static void SHA256_Init( SHA256_INFO Info ) 연쇄변수와길이변수를초기화하는함수 Info SHA256_Process 호출시사용되는구조체 public static void SHA256_Process( SHA256_INFO Info, byte[] pszmessage, int udatalen ) 임의의길이를가지는입력메시지를 512 비트블록단위로나누어압축함수를호출하는함수 Info pszmessage udatalen SHA-256 구조체의포인터변수 입력메시지의포인터변수 입력메시지의바이트길이 public static void SHA256_Close( SHA256_INFO Info, byte[] pszdigest ) 메시지덧붙이기와길이덧붙이기를수행한후마지막메시지블록을가지고압축함수를호출하는함수 Info pszdigest SHA-256 구조체의포인터변수 SHA-256 해시값을저장할포인터변수 테스트페이지 - 19 -

4.3. PHP 소스활용등배포되는소스코드를이용하여해시함수를실행하는방법에대해서는간단한에디터상 태에서설명하도록한다. 단, Apache 서버설정에대한설명은생략하기로한다. 4.3.1 소스코드추가 해시함수에대한소소코드가작성된파일을사용하고자하는파일에포함시킨다. 4.3.2 소스코드설명 o SHA256 static function SHA256_Encrypt( &$pszmessage, $uplaintextlen, &$pszdigest ) SHA256_Init, SHA256_Process, SHA256_Close 함수를내부적으로모두호출하여간편한인터페이스를 제공하기위한함수 $pszmessage $uplaintextlen $pszdigest 입력메시지의포인터변수 입력메시지의바이트길이 SHA-256 해시값을저장할포인터변수 - 20 -

static function SHA256_Init( &$Info ) 연쇄변수와길이변수를초기화하는함수 $Info SHA256_Process 호출시사용되는구조체 static function SHA256_Process(&$Info, &$pszmessage, $udatalen) 임의의길이를가지는입력메시지를 512 비트블록단위로나누어압축함수를호출하는함수 $Info $pszmessage $udatalen SHA-256 구조체의포인터변수 입력메시지의포인터변수 입력메시지의바이트길이 static function SHA256_Close( &$Info, &$pszdigest ) 메시지덧붙이기와길이덧붙이기를수행한후마지막메시지블록을가지고압축함수를호출하는함수 $Info $pszdigest SHA-256 구조체의포인터변수 SHA-256 해시값을저장할포인터변수 테스트페이지 - 21 -

[ 부록 ] 참조구현값 본 SHA-256 소스코드매뉴얼에서는평문메시지 2 가지에대하여아래와같이참조구현값 (Test Vectors) 이제공된다. [ 데이타 1] Input Message Initial hash value Digest H[0] H[1] H[2] H[3] H[4] H[5] H[6] H[7] "abc" 6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19 BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD [ 데이타 2] Input Message Initial hash value Digest H[0] H[1] H[2] H[3] H[4] H[5] H[6] H[7] "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" 6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19 248D6A61 D20638B8 E5C02693 0C3E6039 A33CE459 64FF2167 F6ECEDD4 19DB06C1-22 -