웹어플리케이션보안 암호프로그래밍, crypto-js

Slides:



Advertisements
Similar presentations
Chapter | 4 암호화 기술 Ⅱ암호화. ❖ 암호  통신문의 내용을 제 3자가 판 독할 수 없는 글자 · 숫 자 · 부호 등으로 변경 시킨 것 2/16 암호? 철수 영희 Plaintext attack attack ? ? Cryptography 개방통신로 모레 3.
Advertisements

HTTPS Packet Capture Tutorial
난이도 : 초급 제1장 앱 인벤터 소개 및 준비.
컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
Chapter06 폼 HTML5 Programming.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
(c) Byoungcheon Lee, Joongbu Univ.
jQuery Mobile을 이해하기 전에 jQuery가 무엇인지 알아야 한다.
제 8장 메시지 인증 코드 메시지가 보낸 그대로 왔는가?.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
Secure Socket Layer.
컴퓨터 프로그래밍 기초 [Final] 기말고사
자바 암호 프로그래밍 Java Cryptography Programming
자바 암호 프로그래밍 Java Cryptography Programming
자바 암호 프로그래밍 Java Cryptography Programming
교과목 소개 정보보호.
암호학 응용 Applied cryptography
SSL (Secure Sockets Layers Protocol)
File Depender 중간 발표.
공개키 암호화 프로그래밍 전자상거래보안.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
제10장 메시지 인증과 해쉬 함수 Message Authentication and Hash Functions
FTP 프로그램 채계화 박재은 박수민.
정보화 사회와 컴퓨터 보안.
9장. 디지털 증거의 무결성 유지.
컴퓨터정보공학부 서버 안내 [ IBM x3500 ] it.sangji.ac.kr ict.sangji.ac.kr 혹은
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
제 01 장 인터넷 프로그래밍 개요 학기 인터넷비즈니스과 강 환수 교수.
Wireless Java Programming
자바 암호 프로그래밍 Java Cryptography Programming
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
웹 어플리케이션 보안 2016년 2학기 10. Workflow tools.
인터넷응용프로그래밍 JavaScript(Intro).
Chapter03 캔버스(1) HTML5 Programming.
자바스크립트 암호 프로그래밍 Javascript Cryptography Programming
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
전자서명의 형태 수기서명 디지털서명. 전자서명의 형태 수기서명 디지털서명 전자서명의 필요성.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Wi-Fi 취약점 분석 본 프로젝트는 Wi-Fi 환경에서의 취약점 분석을 위한 프로젝트로 다양한 공격방법을 테스트
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Nessus 4 설치 정보보호응용 조용준.
프로그래밍 원리 Chapter 05 자바스크립트 기초 신한대학교 IT융합공학부 박 호 균.
웹디자인
보고서 (due 5/8) 다음과 같은 방식으로 문제를 해결하시오. 문제 분석 알고리즘 작성 프로그램 작성 테스트 및 검증
16 장 네트워크 보안 : 방화벽과 VPN 16.1 개요 16.2 기밀성 16.3 전자 서명 16.4 인터넷 보안
KERBEROS.
인천대학교 웹과 인터넷 수업 개요 및 내용 소개.
비대칭 암호화 알고리즘 공개키 암호화 알고리즘 소속 : 한세사이버보안고등학교 조장 : 안도현
VHDL를 이용한 DES 설계 정보통신컴퓨터공학부 5조 김인옥, 백미숙
SSL, Secure Socket Layer
암호학 응용 Applied cryptography
웹 어플리케이션 보안 2016년 2학기 11. Enhancing Security.
WZC 무선 연결 방법 (Windows 7 Ver.).
암호학 응용 Applied cryptography
JSP Programming with a Workbook
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
9 브라우저 객체 모델.
(c) Byoungcheon Lee, Joongbu Univ.
채팅 및 파일전송 프로그램 권 경 곤 김 창 년.
트위치 트게더 Twitogether 김준희.
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수
암호 시스템 (Crypto system) 신효철
6 객체.
20 XMLHttpRequest.
자바 암호 프로그래밍 Java Cryptography Programming
Presentation transcript:

웹어플리케이션보안 암호프로그래밍, crypto-js 2017. 9. 중부대학교 정보보호학과 이병천 교수

자바스크립트 암호 라이브러리 Crypto-js 구글에서 만든 자바스크립트 암호 라이브러리 https://www.npmjs.com/package/crypto-js 설치: > npm install crypto-js

프로젝트 준비 프로젝트 폴더 생성 패키지 설치 (서버측) 패키지 설치 (클라이언트측) > md crypto-js > npm install crypto-js node_modules/crypto-js 에 설치됨 패키지 설치 (클라이언트측) > npm install –g bower > bower install crypto-js bower_components/crypto-js 에 설치됨 npm (Node.js package manager) bower (package manager for frontend)

암호프로그래밍 해쉬함수, 메시지인증코드 대칭키암호

해쉬함수 X 해쉬함수(hash function)란? 임의의 길이의 데이터를 입력받아서 고정된 길이의 특징값을 출력하는 함수 임의의 길이의 데이터를 입력받아서 고정된 길이의 특징값을 출력하는 함수 메시지 다이제스트(message digest)라고도 부름 암호키를 사용하지 않는 공개된 함수. 동일한 입력값에 대해 항상 동일한 해쉬값 을 출력함 입력값으로부터 해쉬값을 계산하는 것은 쉽 지만 해쉬값으로부터 그것을 출력하는 입력 값을 찾는 것은 어려움 Message M H X Message Digest D D = H(M)

해쉬함수 해쉬함수의 요구조건 역상 저항성(Pre-image resistance): 주어진 출력에 대하여 입력 값을 구하는 것이 계산상 불가능하다. 제2 역상 저항성(Second pre-image resistance): 주어진 입력에 대하여 같은 출력을 내는 또 다른 입력을 찾아내는 것이 계산상 불가능하다. 충돌저항성(Collision resistance): 같은 출력을 내는 임의의 서로 다른 두 입력 메세지를 찾는 것이 계산상 불가능하다.

해쉬함수의 용도 메시지 다이제스트: 문서의 위조 방지 안전한 난수생성 패스워드 저장 체크섬 생성 및 검증 해쉬값을 생성하여 함께 제공 전자서명과 함께 사용 안전한 난수생성 SecureRandom에서 해쉬함수를 이용 패스워드 저장 사용자의 패스워드를 서버에서는 암호화된 해쉬값으로 저장 패스워드 기반 키생성 알고리즘 (PBKDF2) 체크섬 생성 및 검증 인터넷으로 배포되는 소프트웨어의 원본 보증

해쉬함수 해쉬 알고리즘 Md5 Sha1 Sha256 Sha384 Sha512

Hash, 해쉬함수 – 서버측 프로그래밍 var CryptoJS = require("crypto-js"); var plaintext = 'message to hash'; console.log('Plaintext: '+plaintext); console.log('MD5: '+CryptoJS.MD5(plaintext)); console.log('SHA1: '+CryptoJS.SHA1(plaintext)); console.log('SHA256: '+CryptoJS.SHA256(plaintext)); console.log('SHA384: '+CryptoJS.SHA384(plaintext)); console.log('SHA512: '+CryptoJS.SHA512(plaintext)); console.log('SHA3(224): '+CryptoJS.SHA3(plaintext, { outputLength: 224 })); console.log('SHA3(256): '+CryptoJS.SHA3(plaintext, { outputLength: 256 })); console.log('SHA3(384): '+CryptoJS.SHA3(plaintext, { outputLength: 384 })); console.log('SHA3(512): '+CryptoJS.SHA3(plaintext, { outputLength: 512 })); console.log(); var hash = CryptoJS.SHA256(plaintext); console.log('SHA256-Hex: '+hash); console.log('SHA256-Base64: '+hash.toString(CryptoJS.enc.Base64)); var sha256 = CryptoJS.algo.SHA256.create(); sha256.update("Message Part 1"); sha256.update("Message Part 2"); sha256.update("Message Part 3"); var hash = sha256.finalize(); console.log('SHA256-ProgressiveHash: '+hash);

해쉬함수 – 클라이언트측 프로그래밍 Html 문서 작성 자바스크립트 Crypto-js 를 링크하여 포함 <script src="bower_components/crypto-js/crypto- js.js"></script> <script></script> 태그 내부에 js 프로그램 작성 또는 별도의 js 파일을 만들고 script 태그로 링크 출력 명령 변경 브라우저 화면에 출력하려면 console.log() 함수를 대신하여 document.write() 함수 이용 console.log 함수의 출력결과는 브라우저 콘솔에서 볼 수 있음 (F12/console) 브라우저로 접속하여 동작 확인

Hash, 클라이언트측 똑같은 crypto-js 함수를 사용 가능 서버측 프로그래밍 클라이언트측 프로그래밍 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hash Test with crypto-js</title> <script src="bower_components/crypto-js/crypto-js.js"></script> <script type="text/javascript"> var plaintext = 'message to hash'; document.write('Plaintext: '+plaintext+'<br>'); document.write('MD5: '+CryptoJS.MD5(plaintext)+'<br>'); document.write('SHA1: '+CryptoJS.SHA1(plaintext)+'<br>'); document.write('SHA256: '+CryptoJS.SHA256(plaintext)+'<br>'); document.write('SHA384: '+CryptoJS.SHA384(plaintext)+'<br>'); document.write('SHA512: '+CryptoJS.SHA512(plaintext)+'<br>'); document.write('SHA3(224): '+CryptoJS.SHA3(plaintext, { outputLength: 224 })+'<br>'); document.write('SHA3(256): '+CryptoJS.SHA3(plaintext, { outputLength: 256 })+'<br>'); document.write('SHA3(384): '+CryptoJS.SHA3(plaintext, { outputLength: 384 })+'<br>'); document.write('SHA3(512): '+CryptoJS.SHA3(plaintext, { outputLength: 512 })+'<br>'); document.write('<br>'); var hash = CryptoJS.SHA256(plaintext); document.write('SHA256-Hex: '+hash+'<br>'); document.write('SHA256-Base64: '+hash.toString(CryptoJS.enc.Base64)+'<br>'); var sha256 = CryptoJS.algo.SHA256.create(); sha256.update("Message Part 1"); sha256.update("Message Part 2"); sha256.update("Message Part 3"); var hash = sha256.finalize(); document.write('SHA256-ProgressiveHash: '+hash+'<br>'); </script> </head> <body> </body> </html> 똑같은 crypto-js 함수를 사용 가능 서버측 프로그래밍 클라이언트측 프로그래밍

MAC (메시지인증코드) MAC(메시지인증코드)란? MAC: Message Authentication Code 해쉬함수와 공유된 비밀키를 이용하여 송수신하는 메시지의 원 본성을 인증하는데 사용 MAC은 대칭키 암호알고리즘처럼 송신자와 수신자 사이의 공유 된 비밀키가 필요 MAC 계산에는 공유된 비밀키를 이용하므로 송신자와 수신자만 계산하고 검증할 수 있음. 송신하는 메시지의 인증성을 제공. 중간에서 공격자가 메시지를 변조하는 것을 방지 가능 송신자는 입력메시지와 비밀키를 이용하여 hmac 계산하여 전송. 수신자는 전송된 메시지와 비밐리를 이용하여 hmac 값이 맞는 지 검증.

MAC

Hash와 MAC의 비교 Hash MAC

MAC의 한계 제3자에게 MAC의 유효성 여부를 증명하지 못함 부인방지 불가 이것을 증명하려면 공유된 비밀키를 제3자에게 공개해야 함 부인방지 불가 송신자가 메시지를 보내지 않았다고 부인하는 경우 분쟁 해결이 어려움. 수신자도 동일한 MAC을 계산할 수 있기 때문 부인방지 기능을 제공하기 위해서는 전자서명을 사용

Hmac, 메시지인증코드 var CryptoJS = require("crypto-js"); var plaintext = 'message to hash'; var key = 'super secret key'; console.log('Plaintext: '+plaintext); console.log('Key: '+key); console.log('HmacMD5: '+CryptoJS.HmacMD5(plaintext, key)); console.log('HmacSHA1: '+CryptoJS.HmacSHA1(plaintext, key)); console.log('HmacSHA256: '+CryptoJS.HmacSHA256(plaintext, key)); console.log('HmacSHA384: '+CryptoJS.HmacSHA384(plaintext, key)); console.log('HmacSHA512: '+CryptoJS.HmacSHA512(plaintext, key)); console.log(); var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, "Secret Passphrase"); hmac.update("Message Part 1"); hmac.update("Message Part 2"); hmac.update("Message Part 3"); var hash = hmac.finalize(); console.log('HmacSHA256-progressive: '+hash);

대칭키 암호 송신자와 수신자가 동일한 비밀키를 공유 비밀키를 이용한 메시지 암호화 동일한 비밀키를 이용한 암호문 복호화 암호 알고리즘 AES, DES, 3DES

대칭키 암호 방식

대칭키 암호 방식 데이터를 변환하는 단위에 따라 블록 암호와 스트림 암 호로 분류 블록암호: 고정된 크기의 블록 단위로 암호화/복호화 스트림암호: 난수열을 생성하여 비트단위, 글자단위로 암호화/복 호화 블록암호 스트림암호

블록 암호 알고리즘 DES 3DES (DESede) AES 1977년 NBS(미국 표준국)에서 미국 표준 알고리즘으로 채택 64비트 블록단위 암호화, 56비트 키길이 짧은 키길이로 인한 취약성으로 현재는 사용하지 않음 Feistel 구조 3DES (DESede) DES 암호를 암호화->복호화->암호화 순으로 3번 반복 블록 크기가 64비트, 느린 속도 AES 2001년 DES를 교체하기 위해 새롭게 제정한 암호 표준 128/192/256 비트의 키길이, 10/12/14 라운드 사용 SPN(Substitution Permutation Network) 구조

블록 암호 알고리즘 SEED ARIA 1999년 2월 국내에서 개발한 128비트 블록암호알고리즘 국내 표준, ISO/IEC 국제 표준 SEED128, SEED256 ARIA 경량 환경, 하드웨어 구현 최적화된 128비트 블록암호알고리즘 128/192/256비트의 키길이, 12/14/16 라운드

대칭키 암호화 var CryptoJS = require("crypto-js"); var plaintext = 'message to encrypt'; var key = 'supersecretkey'; console.log('Plaintext: '+plaintext); console.log('Key: '+key); // AES var ciphertext = CryptoJS.AES.encrypt(plaintext, key); console.log('Ciphertext: '+ciphertext); var bytes = CryptoJS.AES.decrypt(ciphertext.toString(), key); var decrypted = bytes.toString(CryptoJS.enc.Utf8); console.log('Decrypted: '+decrypted); // DES var ciphertext = CryptoJS.DES.encrypt(plaintext, key); var bytes = CryptoJS.DES.decrypt(ciphertext.toString(), key); // TripleDES var ciphertext = CryptoJS.TripleDES.encrypt(plaintext, key); var bytes = CryptoJS.TripleDES.decrypt(ciphertext.toString(), key);