제 1장 소 개 컴퓨터네트워크실험실 우 준.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

7 월 12 일 실습 StockQuoteClient.java MarketClient.java.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
컴퓨터와 인터넷.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
네트워크 프로그래밍 및 실습.
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Power Java 제3장 이클립스 사용하기.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
최윤정 Java 프로그래밍 클래스 상속 최윤정
Ch.07-5 xml-rpc 사용하기 김상엽.
4장 자바 기본 구조 4.1 자바 응용 프로그램 분석 4.2 자바 애플릿 프로그램 분석
10장 예외 Lab 10-1.
자바 암호 프로그래밍 Java Cryptography Programming
Power Java 제2장 자바 개발 도구.
자바 암호 프로그래밍 Java Cryptography Programming
파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들
직렬화와 역직렬화에 대하여 직렬화 가능 클래스의 선언 방법
Power Java 제4장 자바 프로그래밍 기초.
7장 배열 ②.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
제 14장 Multicast & Broadcast
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
교과목 소개 정보보호.
Lesson 9. 예외처리.
Lesson 6. 형변환.
Java 기초 (Java JDK 설치 및 환경설정)
23 장 OSI 상위계층 23.1 세션(session)층 23.2 표현(presentation)층
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
정보화 사회와 컴퓨터 보안.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
2 : 대칭암호화 소제목 : 기본적인 대칭암호화.
TCP/IP Socket Programming…
CHAP 12. 리소스와 보안.
[INA470] Java Programming Youn-Hee Han
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
전자서명의 형태 수기서명 디지털서명. 전자서명의 형태 수기서명 디지털서명 전자서명의 필요성.
Lesson 2. 기본 데이터형.
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
8장 쿠키와 세션 한빛미디어(주).
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
16 장 네트워크 보안 : 방화벽과 VPN 16.1 개요 16.2 기밀성 16.3 전자 서명 16.4 인터넷 보안
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
자바 5.0 프로그래밍.
데이터 베이스 DB2 관계형 데이터 모델 권준영.
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
객체기반 SW설계 팀활동지 4.
뇌를 자극하는 Solaris bible.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
오라클 11g 보안.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
9 브라우저 객체 모델.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
RPTree 코드분석 (월) Dblab 김태훈.
JSP Programming with a Workbook
자바 암호 프로그래밍 Java Cryptography Programming
CCIT 네트워크 발표 정보보호학과 평문 사이트와 SSL 사이트, SSL strip과 데이터 변조를 이용한 로그인 취약점
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
윈도우에서의 유니코드.
7 생성자 함수.
6 객체.
20 XMLHttpRequest.
Presentation transcript:

제 1장 소 개 컴퓨터네트워크실험실 우 준

목차 안전한 시스템 암호(Cryptography) 플랫폼 보안(Platform Security) 서로 다른 개념들 예제 프로그램 Masher 예제 프로그램 SecretWriting 예제 프로그램

안전한 시스템 보안이 중요하고 설계의 일부로 간주되는 시스템이다. 안전한 시스템은 시스템을 파괴하는 비용이 그들에게 돌아오는 이익을 능가하도록 설계된다. “모든 시스템은 깨질 수 있다.” 안전한 응용프로그램은 파괴 비용, 개발 비용, 사용의 편리성 사이의 균형이 유지되어야 한다.

암호학 (Cryptology) = 암호(Cryptography) + 암호 해독(Cryptanalysis) 인증(authentication) 신원의 증명 암호는 서명과 인증서를 제공한다 데이터의 기밀성(confidentiality) 데이터의 무결성(integrity)

암호(Cryptography) (cont’d) 암호의 사용 예 안전한 네트워크 통신 안전한 하드디스크 안전한 전자메일 자바 보안 API 사용자가 내부를 잘 알지 못하고도 쉽게 사용할 수 있으며, 서명(signature)과 암호(cipher) 등의 개념을 구현할 수 있다.

플랫폼 보안(Platform Security) 자바는 플랫폼 자체에 보안 기능 내장 바이트 코드검사기, 클래스 로더, 보안 관리기와 함께 안전한 애플릿 실행 제공 자바 개발 툴킷(JDK) 1.2의 새로운 플랫폼 보안 보호 도메인(protection domain) 접근 권한(permission) 정책(policy)

플랫폼 보안(Platform Security) (cont’d) 응용계층의 보안 이 책을 통하여 설명되는 암호를 사용하여 응용계층의 보안 프로그램을 개발할 수 있다. 안전하지 않은 플랫폼의 대안을 제공한다. IP 네트워크에서의 정보의 전달은 안전하지 않으므로 응용 프로그램에서의 암호 지원으로 이를 보완할 수 있다.

서로 다른 개념들 자바 보안과 암호를 이해하기 위한 다섯 가지 개념들 보안 != 암호 자바 보안과 암호를 이해하기 위한 다섯 가지 개념들 보안 != 암호 올바른 보안 모델 ! = 버그가 없는 구현 시험 != 공식적인 증명 컴포넌트 보안 != 전반적인 시스템 보안 자바 보안 != 애플릿 통제(containment) 이와 관련된 Li Gong의 Java Security Architecture 라는 문서의 전체 TP는 http://java.sun.com/javaone/sessions/slides/TT03/index.html을 참고하라.

예제 프로그램 데모 프로그램의 실행 환경 Masher SecretWriting 자바 개발 툴 키트(JDK) 1.1 혹은 그 이후 버전으로 실행 가능 SecretWriting JCE(Java Cryptography Extention)의 클래스를 이용해야만 한다. Http://java.sun.com/products/jdk/1.2/jce/를 통해서 다운로드 할수 있으나 미국과 캐나다의 도메인 내에서만 합법적으로 다운로드 할 수 있다.

Masher 예제 프로그램 메시지 다이제스트의 작동 방법을 보여준다. 메시지 다이제스트 입력 데이터가 일방향 해쉬 함수를 통해서 축약된 데이터이다. 서로 다른 메시지에 대해서 동일한 메시지 다이제스트가 나올 확률은 거의 없다. 전자지문, 안전한 해쉬, 암호 해쉬 라고도 한다. 무결성은 제공하지만 인증과 기밀성을 제공하지는 못한다.

Masher 예제 프로그램 (cont’d) 프로그램 실행 단계 1.명령라인 매개변수 검사 2.메시지 다이제스트 객체 생성 3.메시지 다이제스트 계산 4. 결과를 읽을 수 있도록 base64로 인코딩하여 출력 한다. Base64 바이트 배열을 아스키 문자로 표현하기 위한 코드 체계 자리당 6 비트 사용 sun.misc.BASE64Encoder 클래스를 통해 Base64 인코딩 지원

Masher 예제 프로그램 (cont’d) 소스 코드 (Masher.java) import java.io.*; import java.security.*; import sun.misc.*; public class Masher { public static void main(String[] args) throws Exception { // Check arguments. if (args.length != 1) { System.out.println("Usage: Masher filename"); return; }

Masher 예제 프로그램 (cont’d) // Obtain a message digest object. MessageDigest md = MessageDigest.getInstance("MD5"); // Calculate the digest for the given file. FileInputStream in = new FileInputStream(args[0]); byte[] buffer = new byte[8192]; int length; while ((length = in.read(buffer)) != -1) md.update(buffer, 0, length); byte[] raw = md.digest();

Masher 예제 프로그램 (cont’d) // Print out the digest in base64. BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); System.out.println(base64); }

Masher 예제 프로그램 (cont’d) 실행결과 c:>Masher Masher.java nfEOH/5M+yDLaxaJ+XpJ5Q== 메시지 다이제스트

SecretWriting JCE에서만 찾을 수 있는 클래스를 사용하며 텍스트를 암호화 하고 복호화 한다.  -e : 암호화 옵션, -d : 복호화 옵션  평문 혹은 암호문   c:>java SecretWriting -e Hello, world! Lc4WKHP/uCls8mFcyTwlpQ== c:>java SecretWriting -d Lc4WKHP/uCls8mFcyTwlpQ== Hello, world!

SecretWriting (cont’d) 키의 생성과 저장 DES의 암호화와 복호화 에는 동일한 키를 사용한다. 생성된 키는 SecretKey.ser 이라는 파일에 저장 키에 따라 서로 다른 암호문 생성 Hello, World 원문에 대해 서로 다른 키를 사용하여 생성된 세 개의 암호문 Lc4WKHP/uCls8mFcyTwlpQ== xyOoLnWOH0eqRwUu3rQHJw== hevNJLNowIzrocxplKI7dQ==

SecretWriting (cont’d) 소스코드(Secretwriting.java) import java.io.*; import java.security.*; import javax.crypto.*; import sun.misc.*; public class SecretWriting { public static void main(String[] args) throws Exception { //Check arguments. if (args.lengh < 2) { System.out.println("Usage: SecretWriting -e|-d text"); return; }

SecretWriting (cont’d) // Get or create key. Key key; try { ObjectInputStream in = new ObjectInputStream( new FileInputStream("SecretKey.ser")); key = (Key) in.readObject(); in.close(); }

SecretWriting (cont’d) catch (FileNotFoundException fnfe) { KeyGenerator generator = KeyGenerator.getInstanse("DES"); generator.init(new SecureRandom()); key = generator.generateKey(); ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("SecretKey.ser")); out.writeObject(key); out.close(); } // Get a cipher object. Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

SecretWriting (cont’d) //Encrypt or decrypt the string. if (args[0].indexOf("e") != -1) { cipher.init(Cipher.ENCRYPT_MODE, key); String amalgam = args[1]; for (int i = 2; i < args.length; i++) amalgam += " " + args[i]; byte [] stringBytes = amalgam.getBytes("UTF8"); byte [] raw = cipher.doFinal(stringBytes); BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); System.out.println(base64); }

SecretWriting (cont’d) else if (args[0].indexOf("d") != -1) { cipher.init(Cipher.DECRYPT_MODE, key); BASE64Decoder decoder = new BASE64Decoder(); byte [] raw = decoder.decodeBuffer(args[1]); byte [] stringBytes = cipher.doFinal(raw); String result = new String(stringBytes, "UTF8"); System.out.println(result); }

SecretWriting (cont’d) 실행단계 1. 명령라인 매개변수를 검사한다. 2. 암호를 위한 키를 SecretKey.ser 파일에서 얻어오거나 새로운 키를 생성하여 이 파일에 저장한다. 3. Cipher 객체를 생성한다. 4. 입력 데이터를 암호화 혹은 복호화 한다. 키관리 문제 비밀키를 파일로 보관함으로써 쉽게 노출된다. 보호되는 데이터 베이스의 디렉토리에 보관하거나 패스워드 기반의 암호화를 사용한다.

요약 안전한 시스템을 구축하기 위해서는 플랫폼 보안과 응용 계층의 보안이 요구된다. 자바는 보안 API를 통해서 서명과 암호를 제공한다. 자바는 JDK와 JCE를 통해서 보안을 제공하는 프로그램을 개발할 수 있다.