Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 3. Architecture AI & HCI Lab 김 주 영.

Similar presentations


Presentation on theme: "Chapter 3. Architecture AI & HCI Lab 김 주 영."— Presentation transcript:

1 Chapter 3. Architecture AI & HCI Lab 김 주 영

2 Index Architecture Alphabet Soup Concept classes API and SPI
Factory Methods Standard Names The Provider Architecture Key Management Summary

3 Architecture Java cryptography software 분류 다룰 내용
인증을 위한 암호화 클래스를 포함하는 JDK 강력한 암호화를 지원하는 JCE(Java Cryptography Extension) 다룰 내용 암호화의 개념과 구현(알고리즘)의 분류 Concept Class의 public method들의 분류 암호화 클래스에서 factory method의 사용 provider architecture

4 Alphabet Soup(1) Java Security API는 자바로 보안 프로그램을 작성하기 위한 패키지의 집합
JDK java.security java.security.cert java.security.interfaces java.security.spec JCE javax.crypto javax.crypto.interfaces javax.crypto.spec

5 Alphabet Soup(2) JCA Java Cryptography Architecture은 암호화 클래스의 전반적인 디자인
디자인 패턴과 암호화의 개념, 알고리즘을 정의하기위한 확장 구조를 지정 java.security와 javax.crypto 패키지안의 클래스에 의하여 캡슐화되어 있음 cryptographic provider들에 의해 구현 JDK 1.2에 몇가지 암호화 알고리즘을 구현하기위한 default provider인 SUN을 포함하고 있음

6 Alphabet Soup(3) JCE 암호학 소프트웨어를 무기와 같은 종류로 분류하여 수출을 제한
암호화 클래스를 두가지 그룹으로 분류 JDK 1.2에 포함되어 있는 java.security.* 패키지 JCA의 확장인 JCE(Java Cryptography Extension) 캐나다와 미국만 배포 SunJCE라 불리는 cryptographic provider를 포함 standard extension library JDK의 일부가 아니라 JDK와 함께 작동되는 패키지

7 Alphabet Soup(4) Access Control
java.security의 많은 클래스들이 access control, security policy, permission등과 관련 암호화와는 직접적인 관련이 적음 위 사항에 대한 자세한 정보는 O’Reilly의 [Java Security]를 참조

8 Alphabet Soup(5) Other players
미국 밖에서 적어도 두 그룹이 JCE의 설계에 바탕을 두어 JCE를 구현하고 있고, 미국의 수출 법에 제한을 받지 않고 결과를 배포하고 있음 JCE와 같은 점 암호화의 concept class와 구현 알고리즘를 포함 JCE와 다른 점 수출 제한을 두지 않음

9 Java Security Download Locations
Package Location JCA JCE Cryptix IAIK JCP

10 Java Security API software
JCA java.security java.security.cert Key, MessageDigest, Signature, etc. JDK 1.2 Other core classes Java.security Access control, permissions JCE 1.2 javax.crypto cipher

11 Cryptographic Concept Classes(1)
Class or Interface Description java.security.cert.Certificate javax.crypto.Cipher java.security.Key, java.security.PrivateKey, java.security.PublicKey, javax.crypto.SecretKey javax.crypto.KeyAgreement A cryptographic certificate A cipher A key, used for signing or encryption A secret key exchange protocol

12 Cryptographic Concept Classes(2)
Class or Interface Description java.security.KeyFactory javax.crypto.KeyGenerator java.security.KeypairGenerator java.crypto.Mac java.security.MessageDigest javax.crypto.SecretKeyFactory java.security.SecureRandom javax.security.Signature Translates public and private keys from one format to another Creates keys for symmetric ciphers Creates pairs of public and private keys for signing or encryption A Message Authentication Code(MAC) A cryptographic hash function Translates secret keys from one format to another A cryptographically strong random number engine A digital signature

13 API and SPI 암호화의 concept class에서 method의 분류
API(Application Programming Interface) concept class의 인스턴스를 사용할 수 있는 모든 public method로 구성 SPI(Service Provider Interface) 구현되어진 서브클래스의 method 집합 engine 이름으로 시작됨

14 API and SPI JDK 1.1 JDK 1.2 SPI, API가 섞여 있음 예) java.security.Signature
API method : initSign(), verify() SPI method : engineInitSign(), engineVerify() JDK 1.2 API와 SPI가 분리되어 있음 예) Signature는 지금은 API method만을 포함, java.security.SignatureSpi에 모든 SPI method가 포함

15 What Are Factory Methods?
class method 항상 static methods를 호출함 static method는 실행하기 위해 instance를 필요치 않음 (예) : main() static keyword를 사용하여 정의 instance method 보통의 methods 호출 항상 실행하기 위해 클래스의 특수한 instance를 실행

16 What Are Factory Methods?
factory method는 클래스의 instance를 돌려주는 static method의 특수한 종류 JDK : factory method는 Socket class에서 간접적으로 사용 됨(setSocketImplFactory()) JDK 1.1, 이후 좀더 널리 사용 됨 getInstance()라고 명명 됨 design pattern의 예 design patterns: Elements of Reusable Object-Oriented Software by Erich Gamma외 3명(Addison-Wesley, 1995) 참조

17 Factory Methods MessageDigest md5;
md5 = MessageDigest.getInstance(“MD5”); MD5 알고리즘을 사용하기 위한MessageDigest instance를 생성 JCA의 모든 factory method는 요청 알고리즘이 없으면NoSuchAlgorithmException를 투구 factory method로부터 사용자에게 반환된 인스턴스는 요청한 클래스에서 상속된 것임 sun.security.provider.MD5에서 상속

18 getInstance()를 갖는 Concept classes
javax.crypto.Cipher javax.crypto.KeyAgreement java.security.keyFactory javax.crypto.KeyGenerator java.security.KeyPairGenerator javax.crypto.Mac java.security.MessageDigest javax.crypto.SecretKeyFactory java.security.Signature

19 Standard Algorithm Names
Algorithms supported by Sun Algorithms supported by SunJCE Concept class Cipher KeyAgreement KeyFactory KeyGenerator KeyPairGenerator Mac MessageDigest SecretKeyFactory Signature DSA MD5, SHA-1 DES, DESede, PBEWithMD5AndDES DH DES,DESede HmacMD5, HmacSHAI

20 The Provider Architecture(1)
provider는 암호화의 concept class를 위한 알고리즘을 제공 provider는 java.security.Provider객체에 의해 상속된 알고리즘 클래스의 집합 provider : concept class, Provider : specific class java.security.Security class가 보안 provider들을 관리 프로그램이 암호화 알고리즘이 포함된 factory method를 호출하면 factory method는 Security class에게 요청하고 Security class는 provider에게 매치되는 클래스를 찾음

21 The Provider Architecture(2)
Program Providers 4. 예. sun.security.provider.MD5 class입니다. 3.누가 MD5 message digest class를 가지고 있습니까? 1.MD5알고리즘을 구현한 instance를 주세요 6. 자 여기 있습니다. MessageDigest Security 2. 어떤 provider가 제공하던지 MD5를 구현한 message digest 객체를 주세요. 5. 예. 클래스를 찾았습니다. 여기 instance가 있습니다.

22 The Provider Architecture(3)
예) MD5 message digest가 지원되는 하나 이상의 provider를 가진다면, 상위에 참조된 것이 사용됨 특별한 provider를 사용하기 원할 때 getInstance()의 overloaded 버전을 사용 예) Jonathan provider에 의해 구현된 ElGamal 알고리즘의 KeyPairGenerator를 요청시(9장) KeyPairGenerator kpg = KeyPairGenerator(“ElGamal”, “Jonathan”);

23 Provider configuration(1)
static provider configuration java.security file(lib/security)을 수정 다음과 같은 format으로 각각의 provider 설정 n은 provider들의 참조 순서 결정 첫번째의 default provider가 n = 1 security.provider.n = providerclassname security.provider.1 = sun.security.provider.Sun

24 Provider configuration(2)
dynamic provider configuration provider를 실행 시에 제공 Provider class의 인스턴스를 가지고 Security.addProvider()나 Security.insertProviderAt()를 호출 Security class가 초기화 되었을 때, 우선 java.security file을 읽어 설치 후에도 적당한 provider들을 설치나 삭제 가능

25 Methods for managing Providers at runtime
public static int addProvider(Provider provider) provider preference끝에 추가하고 provider의 위치 반환 public static Provider getProvider(String name) provider의 이름, null(발견 못했을 시) 반환 public static Provider[] getProviders() 현재 설치된 모든 provider들의 배열을 반환 public static int insertProviderAt(Provider provider, int position) 주어진 위치에 provider를 추가 미리 추가된 provider를 재 추가 시에 -1 반환 public static void removeProvider(String name) 지정된 provider를 제거

26 Installing JCE JCE는 Java Archive(JAR) file로 압축되어 있음
JCE를 download하면 CLASSPATH에 JAR를 추가 JCE algorithm을 사용하기 위해, SunJCE를 설치 예)SunJCE를 static provider로 configure시 java.security file에 다음과 같이 추가 security.provider.1=sun.security.provider.Sun security.provider.2=com.sun.crypto.provider.SunJCE

27 Key Management data를 암호화하기 위해 private key가 필요
data를 복호화하기 위해 암호화 시킨 사람의 public key가 필요 암호화를 필요하는 많은 사람들을 갖으면 키 관리 필요 JCA는 Identity, KeyStore class에 기반을 두어 이를 지원(5장에서 자세히 다룸)

28 Summary Java.security, javax.crypto 패키지로 구현
provider들에 의해서 복잡한 알고리즘을 쉽게 구현 암호화 프로그램이 자바로 구현이 쉬움 내부 구조를 알면 무척 복잡한 그림들이 있지만 스스로가 자신의 provider를 만들지 않는 이상 걱정할 것이 없음

29

30

31

32


Download ppt "Chapter 3. Architecture AI & HCI Lab 김 주 영."

Similar presentations


Ads by Google