자바스크립트 암호 프로그래밍 Javascript Cryptography Programming

Slides:



Advertisements
Similar presentations
1. 브라우저에서 로 관리창으로 접속해서, 서버 인증서를 설치 할 서버를 선택하고 Manage 버튼을 클릭합니다. 2. Security 탭을 선택한 후, 인증서 Trust.
Advertisements

최성락 최인석 나주한. 특징 : 공개키 n, g 를 사용하여 키 분배가 가능. (g 는 Zn 의 primitive element) Discrete logarithm 에 기반. 두 명 이상의 경우에도 적용가능. 키 교환 없이도.
불특정 공격에 무너진 H 사 업무 시스템 서서히 저하 내부에서 원인 불명으로 네트워크의 속도가 서서히 저하 되는 현상이 발생 공격의 발생 핵심 장 비 서비스가 되다 되지 않는 현상이 심해지고 결국 핵심 장 비는 장애가 발생하게 됨 장비 장애 발생 핵심 장비 장애 전체.
HTTPS Packet Capture Tutorial
난이도 : 초급 제1장 앱 인벤터 소개 및 준비.
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
표준 SSL Server Identification
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
(c) Byoungcheon Lee, Joongbu Univ.
제 8장 메시지 인증 코드 메시지가 보낸 그대로 왔는가?.
Ch.07-5 xml-rpc 사용하기 김상엽.
컴퓨터 프로그래밍 기초 [Final] 기말고사
자바 암호 프로그래밍 Java Cryptography Programming
PHP입문 Izayoi 김조흔.
교과목 소개 정보보호.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
암호학 응용 Applied cryptography
SSL (Secure Sockets Layers Protocol)
File Depender 중간 발표.
공개키 암호화 프로그래밍 전자상거래보안.
제10장 메시지 인증과 해쉬 함수 Message Authentication and Hash Functions
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Error Detection and Correction
정보화 사회와 컴퓨터 보안.
9장. 디지털 증거의 무결성 유지.
Chap 4. 공개키 암호.
상관함수 correlation function
암호화 및 인증.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
자바 5.0 프로그래밍.
인터넷응용프로그래밍 JavaScript(Intro).
웹어플리케이션보안 암호프로그래밍, crypto-js
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
전자서명의 형태 수기서명 디지털서명. 전자서명의 형태 수기서명 디지털서명 전자서명의 필요성.
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Nessus 4 설치 정보보호응용 조용준.
8장 쿠키와 세션 한빛미디어(주).
웹디자인
16 장 네트워크 보안 : 방화벽과 VPN 16.1 개요 16.2 기밀성 16.3 전자 서명 16.4 인터넷 보안
KERBEROS.
제1장 정보보호 개요
제 13장 PGP 암호 기술을 조합하는 기술.
비대칭 암호화 알고리즘 공개키 암호화 알고리즘 소속 : 한세사이버보안고등학교 조장 : 안도현
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
VHDL를 이용한 DES 설계 정보통신컴퓨터공학부 5조 김인옥, 백미숙
SSL, Secure Socket Layer
Web Storage 인공지능 연구실.
통신망 정보보호 이재광, 이임영, 소우영, 최용락.
암호학 응용 Applied cryptography
웹 어플리케이션 보안 2016년 2학기 11. Enhancing Security.
Introduction to JSP & Servlet
암호학 응용 Applied cryptography
Flow Diagram IV While.
JSP Programming with a Workbook
함수, 모듈.
9 브라우저 객체 모델.
(Artificial Intelligence, BabyBoom, Contract, BlockChain…)
Numerical Analysis Programming using NRs
(c) Byoungcheon Lee, Joongbu Univ.
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수
암호 시스템 (Crypto system) 신효철
CCIT 네트워크 발표 정보보호학과 평문 사이트와 SSL 사이트, SSL strip과 데이터 변조를 이용한 로그인 취약점
 6장. SQL 쿼리.
C++ Espresso 제15장 STL 알고리즘.
7 생성자 함수.
6 객체.
20 XMLHttpRequest.
자바 암호 프로그래밍 Java Cryptography Programming
Presentation transcript:

자바스크립트 암호 프로그래밍 Javascript Cryptography Programming 2017. 3. 중부대학교 정보보호학과 이병천 교수

차례 1. 암호와 정보보호 2. Javascript Cryptography CryptoJS Forge Web Cryptography API

1. 암호와 정보보호

1.1 암호의 개념 암호(cryptography) 현대 암호가 제공해야 하는 정보보호 기능 암호학 암호의 어원: 그리스어 Cryptos에서 유래 평문을 해독 불가능한 형태로 변형하거나 또는 암호화된 통신문을 원래의 해독 가능한 상태로 복구하는 것 현대 암호가 제공해야 하는 정보보호 기능 기밀성: 정보를 타인이 보지 못하도록 감춤 (암호화) 무결성: 정보의 불법 변조 여부를 확인 (해쉬함수, 메시지인증코드) 부인방지: 사용자의 행위를 부인하지 못함 (전자서명) 인증, 접근통제: 사용자의 신분을 확인하고 정보에 대한 적법한 권한 을 부여 암호학 암호학이란 이와 같은 기능들을 구현하기 위한 모든 수학적인 원리, 수단, 방법 등의 기반기술을 말함 암호를 사용하지 않고 궁극적인 정보보호를 성취하는 것은 불가능

암호 시스템의 구성 도청자(eavesdropper) 공격자(attacker) 송신자 (sender) 수신자 (receiver)

암호 관련 용어 설명 도청자(eavesdropper) 공격자(attacker) 암호설계(cryptography) 암호해독(cryptanalysis) 수동공격(passive attack) 능동공격(active attack)

암호의 여러가지 방식 대칭키 암호 (비밀키 암호) 블록 암호 스트림 암호 암호화와 복호화 알고리즘에 동일한 키가 사용되는 방식의 암호 비밀키는 제3자에게 알려지면 안되므로 송신자와 수신자는 사용 되는 키를 비밀리에 공유하고 안전하게 보관해야 한다. 블록 암호 대칭키 암호의 일종으로 암호화와 복호화시 특정 크기의 블록 단 위로 암호화/복호화 연산을 하는 방식의 암호 각 블록의 암호화와 복호화에는 동일한 키가 사용됨 스트림 암호 블럭의 크기를 1로 하여 블록 마다 각각 다른 키를 사용하여 암 호문을 생성하는 방식 암호화와 복호화시 키스트림 생성기를 이용하여 키스트림을 생 성하며 이것을 평문과 연산하여 암호화하고(송신자) 거꾸로 이것 을 암호문과 연산하여 평문을 얻어낸다(수신자).

암호의 여러가지 방식 비대칭키 암호(공개키 암호) 하나의 쌍이 되는 두 개의 키를 생성하여 하나는 암호화에 사용 하고 다른 하나는 복호화에 사용한다. 암호화에 사용하는 키는 공개할 수 있어서 공개키라고 부르고 복 호화에 사용하는 키는 사용자만이 안전하게 보관해야 하는 키로 개인키(비밀키)라고 부른다. 두 개의 키가 서로 다르므로 비대칭키 암호라고 부르며 하나의 키를 공개하므로 공개키 암호라고도 부른다. 공개키를 공개하더라도 이것으로부터 개인키를 계산해내는 것은 수학적으로 매우 어려운 문제이다. 공개키와 쌍이 되는 개인키는 반드시 존재하므로 이것을 찾아내 는 것이 불가능한 것은 아니다. 찾아내기 어려울 뿐이다.

암호의 여러가지 방식 해쉬함수 임의의 길이의 정보(비트스트링)를 입력으로 하여 고정된 길이의 출력값인 해쉬코드를 생성해내는 함수 해쉬값은 입력정보에 대한 변조할 수 없는 특징값을 나타내며 통 신 중에 정보의 변조가 있었는지 여부를 확인하는 용도에 사용된 다. 이런 용도로 사용될 수 있기 위해서 해쉬함수는 같은 해쉬값을 가지는 두 개의 입력 메시지를 찾는 것이 계산적으로 불가능해야 한다. 해쉬함수에는 키를 사용하지 않는다. 주어진 정보에 대한 해쉬값 은 누구나 계산할 수 있다.

암호의 여러가지 방식 메시지인증코드 (MAC: Message Authentication Code) 데이터가 변조(수정, 삭제, 삽입 등)되었는지를 여부를 검증할 수 있도록 데이터에 덧붙이는 코드 원래의 데이터로만 생성할 수 있는 값을 데이터에 덧붙여서 확인 하도록 하는 것 송신자와 수신자는 비밀키를 공유하고 있으며 MAC 계산에 비밀 키를 사용한다. 그러므로 송신자와 수신자만이 MAC을 계산하고 검증할 수 있다.

암호의 여러가지 방식 패스워드 기반 키생성 사용자가 입력하는 패스워드를 직접 비밀키로 사용하는 것은 고 정된 키를 사용하게 되어 사전공격 등의 방법이 가능하므로 보안 성에 문제가 많다. 서버에 사용자의 패스워드를 직접 저장하게 되면 관리자가 사용 자의 패스워드를 알게 되고 외부 공격자의 해킹에 대한 위협도 있어서 피해야 한다. 사용자가 입력하는 패스워드에 의존하면서도 난수 특성을 갖는 키를 생성하여 사용할 필요가 있다. 패스워드기반 키생성함수 PBKDF2() 이용

암호의 여러가지 방식 전자서명 전자문서에 대한 전자적인 방식에 의한 서명으로 서명자만이 생 성할 수 있고 누구나 서명의 유효성을 검증할 수 있다. 전자서명은 공개키 암호 방식의 일종이다. 개인키로 서명을 생성하고 공개키로 서명을 검증한다. 개인키는 해당 서명자만이 가지고 있으므로 다른 사람이 서명을 위조할 수 없으며, 전자서명은 서명자의 정당한 서명으로 인정된 다. 유효한 서명에 대해 서명자는 자신이 서명한 사실을 부인할 수 없다(부인방지 기능).

암호의 여러가지 방식 키합의 공개키 암호는 속도가 느리기 때문에 실제의 데이터를 암호화, 복호화하는 용도에는 사용하지 않는다. 공개키 암호는 속도가 느리기 때문에 실제의 데이터를 암호화, 복호화하는 용도에는 사용하지 않는다. 송신자와 수신자가 비밀키 암호를 사용하기 위해서는 미리 비밀 키를 공유하거나 안전한 통신 채널을 사용하여 세션키를 전송하 는 것이 필요하다. 송신자와 수신자가 직접 만나지 않고도 공개된 통신채널을 통해 서 특정한 방법으로 세션키를 안전하게 공유하는 방식을 키합의 라고 한다.

1.2 정보보호를 위한 암호의 역할 정보화 사회란? 정보보호의 중요성 정보의 축적, 처리, 전송 능력이 획기적으로 증대되면서 정보의 가치가 물질이나 에너지 이상으로 중요해지는 사회 정보시스템, 정보서비스에 크게 의존하는 사회 정보가 상품으로서의 가치를 인정받아 시장에서 유통되는 사회 정보보호의 중요성 정보시스템의 오류, 마비로 인한 피해 정보의 불법적 노출시 피해, 개인정보를 이용한 사기 해킹공격에 의한 피해 산업스파이 정보전

암호와 정보보호의 관계 정보시스템이 제공해야 하는 정보보호 기능 암호기술은 정보보호를 제공하기 위한 수학적 기반기술 기밀성(Confidentiality) : 정보를 볼 수 있는 권한을 가지지 않은 사람이 정보에 접근하지 못하도록 제한을 가함. 무결성(Integrity) : 정보가 권한이 없는 사람에 의해서 조작되거 나 훼손되지 않도록 함. 가용성(Availability) : 권한을 가진 사람은 원할 때 정보를 사용할 수 있어야 함. 인증, 접근제어: 사용자의 신분을 확인하고 그에 맞는 권한을 부 여함 암호기술은 정보보호를 제공하기 위한 수학적 기반기술 인터넷과 같은 공개된 통신망을 사용하면서 암호기술 없이 이런 정보보호의 목표를 제공하는 것은 불가능

2. Javascript Cryptography 여러 가지 라이브러리들이 존재 http://cryptojs.altervista.org/test/simulate-threading- speed_test.html CryptoJS 구글에서 개발 https://github.com/sytelus/CryptoJS Forge 인증서 기반 TLS 기능을 제공 http://digitalbazaar.github.io/forge/ Web Cryptography API  웹브라우저에 기본 내장된 웹 암호 표준 웹 기술 표준화 기구인 W3C에서 표준화 https://www.w3.org/TR/WebCryptoAPI/ 참조

웹 암호 기술 클라이언트(브라우저)측 암호 - 자바스크립트 웹서버측 암호 - PHP - Javascript (node.js) - Java (JSP) - 파이썬 (Django)

해쉬함수 해쉬함수란? 해쉬함수는 다음과 같은 특성을 만족시켜야 한다. 임의의 길이의 입력메시지에 대하여 고정된 길이의 특징값(해쉬 값)을 계산해내는 함수. 키가 사용되지 않으므로 입력메시지가 같으면 동일한 해쉬값을 출력. 해쉬함수는 다음과 같은 특성을 만족시켜야 한다.  일방향성: 입력메시지로부터 해쉬값을 계산하는 것은 쉽지만 출 력 해쉬값으로부터 그 해쉬값을 출력하는 입력메시지를 찾는 것 은 어렵다. 충돌회피성: 같은 해쉬값을 출력하는 두개의 입력메시지를 찾아 내는 것은 어렵다.

해쉬함수 예제 CryptoJS.SHA1(msg);     <script src="CryptoJS/rollups/md5.js"></script>     <script src="CryptoJS/rollups/sha1.js"></script>     <script src="CryptoJS/rollups/sha256.js"></script>     <script src="CryptoJS/rollups/sha512.js"></script>     <script src="CryptoJS/rollups/sha3.js"></script>     <script src="CryptoJS/ripemd160.js"></script>     <script>         function hash()          {             var msg = document.getElementById("message").value;             var rst = document.getElementById("result");             var select = document.getElementById("item");             var option_value = select.options[select.selectedIndex].value;             if (option_value==1) // MD5                  rst.value = CryptoJS.MD5(msg);             else if (option_value==2) // SHA1                 rst.value = CryptoJS.SHA1(msg);             else if (option_value==3) // SHA256                 rst.value = CryptoJS.SHA256(msg);             else if (option_value==4) // SHA512                 rst.value = CryptoJS.SHA512(msg);             else if (option_value==5) // SHA3                 rst.value = CryptoJS.SHA3(msg);             else if (option_value==6) // RIPEMD160                 rst.value = CryptoJS.RIPEMD160(msg);         }     </script> CryptoJS.SHA1(msg); http://cris.joongbu.ac.kr/course/2017-1/wp/crypto/hash.html

메시지인증코드 메시지인증코드 메시지인증코드는 동일한 키를 공유하고 있는 송신자와 수신자 가 전송하는 메시지의 인증성을 상대방에게 확인시키기 위해서 계산하는 값. 전송하는 메시지와 공유한 키를 입력으로 하여 해쉬값을 계산 HMAC – 해쉬함수를 이용한 메시지인증코드 표준

메시지인증코드 예제 CryptoJS.HmacSHA1(msg,key);     <script src="CryptoJS/rollups/hmac-md5.js"></script>     <script src="CryptoJS/rollups/hmac-sha1.js"></script>     <script src="CryptoJS/rollups/hmac-sha256.js"></script>     <script src="CryptoJS/rollups/hmac-sha512.js"></script>     <script>         function hmac()          {             var msg = document.getElementById("message").value;             var key = document.getElementById("key").value;             var rst = document.getElementById("result");             var select = document.getElementById("item");             var option_value = select.options[select.selectedIndex].value;             if (option_value==1) // HmacMD5                  rst.value = CryptoJS.HmacMD5(msg,key);             else if (option_value==2) // HmacSHA1                 rst.value = CryptoJS.HmacSHA1(msg,key);             else if (option_value==3) // HmacSHA256                 rst.value = CryptoJS.HmacSHA256(msg,key);             else if (option_value==4) // HmacSHA512                 rst.value = CryptoJS.HmacSHA512(msg,key);         }     </script> CryptoJS.HmacSHA1(msg,key); http://cris.joongbu.ac.kr/course/2017-1/wp/crypto/hmac.html

패스워드기반 키생성 필요성 패스워드기반 키생성함수 PBKDF2() 사용자가 입력하는 패스워드를 직접 비밀키로 사용하는 것은 고 정된 키를 사용하게 되어 사전공격 등의 방법이 가능하므로 보안 성에 문제가 많다. 사용자가 입력하는 패스워드에 의존하면서도 난수 특성을 갖는 키를 생성하여 사용할 필요가 있다. 패스워드기반 키생성함수 PBKDF2() Password-based Key Derivation Function (1)사용자 입력 패스워드, (2)랜덤한 salt값, (3)반복횟수(iteration) 값을 이용하여 난수처럼 보이는 암호키를 생성하여 사용 salt값과 반복횟수값은 공격자의 사전공격을 어렵게 하는 중요한 요소이다.

패스워드기반 키생성 예제         <script src="CryptoJS/rollups/pbkdf2.js"></script>         <script>             function randomSalt()             {                 var s = document.getElementById("salt");                 s.value = CryptoJS.lib.WordArray.random(128/8);             }             function PBKDF2()                  var s = document.getElementById("salt").value;                 var l = document.getElementById("iteration").value;                 var p = document.getElementById("pass").value;                 var r = document.getElementById("result");                 r.value = CryptoJS.PBKDF2(p, s, { keySize: 512/32, iterations: l });         </script> http://cris.joongbu.ac.kr/course/2017-1/wp/crypto/pbkdf2.html

대칭키 암호 대칭키 암호 AES 암호화 알고리즘과 복호화 알고리즘에서 동일한 키를 사용하는 알고리즘 암호화 알고리즘과 복호화 알고리즘에서 동일한 키를 사용하는 알고리즘 송신자는 일반적으로 난수생성함수를 이용하여 임의로 생성한 키를 사용하여 암호화하며 송신자는 이 키를 수신자에게 안전하 게 전달해야 함 AES 블록암호 국제 표준

대칭키 암호 예제 암호화 CryptoJS.AES.encrypt(msg,key); 복호화 CryptoJS.AES.decrypt(encrypted,key) http://cris.joongbu.ac.kr/course/2017-1/wp/crypto/symmetric.html

Forge Forge 예제 인증서 기반 TLS 기능을 제공 http://digitalbazaar.github.io/forge/ http://cris.joongbu.ac.kr/course/2017-1/wp/crypto/forge/index.html

Forge

Web Cryptography API Web Cryptography API 웹브라우저에 기본 내장된 웹 암호 표준 웹 기술 표준화 기구인 W3C에서 표준화 https://www.w3.org/TR/WebCryptoAPI/ 참조 https 환경에서만 사용 브라우저에 기본 내장된 window.crypto 객체 이용 // SHA-1 - digest window.crypto.subtle.digest(     { name: "SHA-1",  },     u8a     // new Uint8Array([1,2,3,4]) //The data you want to hash as an ArrayBuffer ) .then(function(hash){     //returns the hash as an ArrayBuffer     result_hash += "plaintext: "+str+"<br>";     var dv = buf2hex(hash);         console.log(new Uint8Array(hash));     result_hash += "SHA-1: "+dv+"<br>";  }) .catch(function(err){     console.error(err); });