79
1 Computer Network Lab. Key Managemnet ์†Œ์†Œ์†Œ์†Œ์†Œ์†Œ์†Œ ์†Œ์†Œ์†Œ ์†Œ์†Œ์†Œ , ์†Œ์†Œ์†Œ , ์†Œ์†Œ์†Œ

Key Managemnet

  • Upload
    nituna

  • View
    43

  • Download
    2

Embed Size (px)

DESCRIPTION

Key Managemnet. ์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™ ์‹คํ—˜์‹ค ๊น€๊ฒฝํƒœ, ์ „์€์•„, ๋ฏผ๋ณ‘๋„. ๋ชฉ ์ฐจ. ์†Œ ๊ฐœ Keys Key Generators ์™€ Translators Key Agreement The Identity Key Management Paradigm The KeyStore Key Management Paradigm ๊ฒฐ ๋ก . ๊ตฌ์„ฑ. The KeyStore Key Management Paradigm. Keys Key Generators Key Translators - PowerPoint PPT Presentation

Citation preview

Page 1: Key Managemnet

1Computer Network Lab.

Key Managemnet

์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™ ์‹คํ—˜์‹ค

๊น€๊ฒฝํƒœ , ์ „์€์•„ , ๋ฏผ๋ณ‘๋„

Page 2: Key Managemnet

2Computer Network Lab.

๋ชฉ ์ฐจ๋ชฉ ์ฐจ

์†Œ ๊ฐœ์†Œ ๊ฐœ KeysKeys

Key GeneratorsKey Generators ์™€ ์™€ TranslatorsTranslators

Key Agreement Key Agreement

The Identity Key Management ParadigmThe Identity Key Management Paradigm

The KeyStore Key Management ParadigmThe KeyStore Key Management Paradigm

๊ฒฐ ๋ก ๊ฒฐ ๋ก 

Page 3: Key Managemnet

3Computer Network Lab.

์†Œ ๊ฐœ์†Œ ๊ฐœ ๋ฐฐ๊ฒฝ๋ฐฐ๊ฒฝ :: ๊ฐœ์ธ์ •๋ณด์˜ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•˜์—ฌ ์•”ํ˜ธ ํ‚ค ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  , ๋”ฐ๋ผ์„œ ์•”ํ˜ธ ํ‚ค์˜ ๊ด€๋ฆฌ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚จ .

Sun ์€ ํ‚ค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณต (JDK).

JDK class ์™€ interface ๊ฐ€ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

KeysKeysKey GeneratorsKey GeneratorsKey TranslatorsKey TranslatorsKey Agreement Key Agreement

KeysKeysKey GeneratorsKey GeneratorsKey TranslatorsKey TranslatorsKey Agreement Key Agreement

The Identity KeyManagementParadigm

The Identity KeyManagementParadigm

The KeyStore KeyManagementParadigm

The KeyStore KeyManagementParadigm

๊ตฌ์„ฑ

Page 4: Key Managemnet

4Computer Network Lab.

Keys(1/3)Keys(1/3)

Public String getAlgorithm()Public String getAlgorithm()

Public byte[] getEncoded() Public byte[] getEncoded()

Public String getFormat() Public String getFormat()

java.security.Keyjava.security.Key

์ธํ„ฐํŽ˜์ด์Šค์ธํ„ฐํŽ˜์ด์Šค

java.security.PublicKey java.security.PublicKey

java.security.PrivateKey java.security.PrivateKey

java.securityjava.securityjava.securityjava.security

public PublicKey getPublic() public PublicKey getPublic()

public PivateKey getPrivate() public PivateKey getPrivate()

ํด๋ž˜์Šคํด๋ž˜์Šค

java.security. KeyPair java.security. KeyPair

javax.crypto.SecretKeyjavax.crypto.SecretKey

javax.cryptojavax.crypto์ธํ„ฐํŽ˜์ด์Šค์ธํ„ฐํŽ˜์ด์Šค

Page 5: Key Managemnet

5Computer Network Lab.

Keys(2/3)Keys(2/3)

๋ฉ”์†Œ๋“œ public String getAlgorithm()

- ํ‚ค์—์„œ ์‚ฌ์šฉ๋œ ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฆฌํ„ด ( ์˜ˆ :DSA, DSA, MD5, RSA ๋“ฑ )

public byte[] getEncoded() - ์•”ํ˜ธํ™”๋œ ๊ฐ’ ๋ฆฌํ„ด ( ์•”ํ˜ธํ™”๋Š” ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์— ํ‚ค ๊ฐ’์„ ์ ์šฉ ) public String getFormat() - ์•”ํ˜ธํ™”์— ์‚ฌ์šฉ๋œ ํ‚ค ํฌ๋งท์˜ ์ด๋ฆ„ ๋ฆฌํ„ด ( ์˜ˆ :X.509, PKCS#8)

java.security.Key ์ธํ„ฐํŽ˜์ด์Šค - ๋ชจ๋“  ํ‚ค์˜ ๊ณตํ†ต์  ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

- ๋น„๋ฐ€ ํ‚ค์— ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ( ๊ฐœ์ธ ๋˜๋Š” ์„ธ์…˜ ํ‚ค )

java.crypto.SecuretKey ์ธํ„ฐํŽ˜์ด์Šค

Page 6: Key Managemnet

6Computer Network Lab.

Keys(3/3)Keys(3/3)

java.security.PublicKey

- ๊ณต๊ฐœ ํ‚ค์— ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค java.security.PrivateKey

- ๊ฐœ์ธ ํ‚ค์— ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

JDK JDK ์ธํ„ฐ ํŽ˜์ด์Šค์ธํ„ฐ ํŽ˜์ด์Šค (( ํƒ€์ž…์˜ ์•ˆ์ •์„ฑ๊ณผ ํ‚ค ํ™•์ธํƒ€์ž…์˜ ์•ˆ์ •์„ฑ๊ณผ ํ‚ค ํ™•์ธ ))

JDK JDK ํด๋ž˜์Šคํด๋ž˜์Šค public KeyPair(PublicKey publicKey, PrivateKey privateKey) - ๊ณต๊ฐœ ํ‚ค์™€ ๊ฐœ์ธ ํ‚ค๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ํ‚ค ์Œ ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ : public PublicKey getPublic() - ๊ณต๊ฐœ ํ‚ค ๋ฆฌํ„ด public PrivateKey getPrivate() - ๊ฐœ์ธ ํ‚ค ๋ฆฌํ„ด

Page 7: Key Managemnet

7Computer Network Lab.

Key Generator(1/6)

: ์•”ํ˜ธ ํ‚ค ์ƒ์„ฑ ( ์•”ํ˜ธํ‚ค : ํ‚ค ๋˜๋Š” ํ‚ค ์Œ ) ์•”ํ˜ธ ํ‚ค ์ƒ์„ฑ ๋‹จ๊ณ„์•”ํ˜ธ ํ‚ค ์ƒ์„ฑ ๋‹จ๊ณ„

1. ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ํ‚ค Generator ๊ฐ์ฒด ํš๋“2. ํ‚ค genetator ์ดˆ๊ธฐํ™”3. ํ‚ค ๋˜๋Š” ํ‚ค ์Œ์˜ ์ƒ์„ฑ์„ key generator ์—๊ฒŒ ์š”์ฒญ

java.securityjava.securityํด๋ž˜์Šคํด๋ž˜์Šค

Public abstract void initialize(int strength, SecureRandom random)Public abstract void initialize(int strength, SecureRandom random)

Public void initialize(int strength)Public void initialize(int strength)

Public abstract KeyPair genKeyPair() Public abstract KeyPair genKeyPair()

java.security.KeyPairGeneratorjava.security.KeyPairGenerator

Page 8: Key Managemnet

8Computer Network Lab.

Key Generator(2/6)

javax.cryptojavax.cryptoํด๋ž˜์Šคํด๋ž˜์Šค

Public final void init(SecureRandom random)*Public final void init(SecureRandom random)*

Public final void init(int strength) Public final void init(int strength)

Public final void init(int strength, SecureRandom random) Public final void init(int strength, SecureRandom random)

javax.crypto.KeyGeneratorjavax.crypto.KeyGenerator

Public final SecretKey generateKey( ) Public final SecretKey generateKey( )

Page 9: Key Managemnet

9Computer Network Lab.

Key Generator(3/6)Key Generator(3/6)

Generator Generator ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ

public abstract void initialize(int strength, SecureRandom random)

: ๋ณด์•ˆ๊ฐ•๋„ ( ์‹ค์ œ๋กœ ํ‚ค๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋น„ํŠธ ์ˆ˜ ) ์™€ ๋‚œ์ˆ˜๋กœ ์ดˆ๊ธฐํ™”

public void initialize(int strength)

: ๋ณด์•ˆ ๊ฐ•๋„๋กœ ์ดˆ๊ธฐํ™”

KeyPairGenerator KeyPairGenerator ํด๋ž˜์Šคํด๋ž˜์Šค: java.security.KeyPairGenerator- ๊ณต๊ฐœ ํ‚ค์™€ ๊ฐœ์ธ ํ‚ค ์Œ์„ ์ƒ์„ฑํ•˜๊ณ 

KeyPair ๋กœ ๋ฆฌํ„ด . Generator Generator ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด๋ฅผ getInstance() getInstance() ๋ฉ”์†Œ๋“œ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜๋ฅผ ๋ช…์‹œํ•˜๋Š” ๋ฉ”์†Œ๋“œ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜๋ฅผ ๋ช…์‹œํ•˜๋Š”

๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ์ ์šฉํ•จ์œผ๋กœ ์ƒ์„ฑ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ์ ์šฉํ•จ์œผ๋กœ ์ƒ์„ฑ Ex) KeyPairGenerator kpg = KeyPairGenerator.getInstance(โ€œElGamalโ€)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ• ์‹œ NoSuchAlgorithmException ๋™์ž‘

Page 10: Key Managemnet

10Computer Network Lab.

Key Generator(4/6)Key Generator(4/6)

ํ‚ค ์ƒ์„ฑ ๋ฉ”์†Œ๋“œํ‚ค ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ Public abstract KeyPair genKeyPair()

: ์ด์ „์˜ initialze() ์—์„œ ๋ช…์‹œ๋œ ๊ฐ•๋„์™€ ๋žœ๋ค ๋น„ํŠธ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ

key pair ๋ฅผ ์ƒ์„ฑ

Ex)

KeyPairGenerator kpg = KeyPairGenerator.getInstance(โ€œDSAโ€);

kpg.initialize(1024);

keyPair pair = kpg.genKeyPair();

Page 11: Key Managemnet

11Computer Network Lab.

Key Generator(5/6)Key Generator(5/6)

KeyGenerator KeyGenerator ํด๋ž˜์Šคํด๋ž˜์Šค: ๋Œ€์นญ ์•”ํ˜ธ์—์„œ์˜ ํ•˜๋‚˜์˜ ํ‚ค ์ƒ์„ฑ . ๋”ฐ๋ผ์„œ JCE ๋Š” jvax.crypto.KeyGenerator ๋ผ๋Š” ๋žœ๋คํ•œ ํ•˜๋‚˜์˜ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค ํฌํ•จ

์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œPublic final void init(SecureRandom random)*

: ๋‚œ์ˆ˜ ์‚ฌ์šฉํ•˜์—ฌ KeyGenerator ์„ ์ดˆ๊ธฐํ™”Public final void init(int strength)

: ๋ณด์•ˆ ๊ฐ•๋„ ์‚ฌ์šฉPublic final void init(int strength, SecureRandom random)

: ๋ณด์•ˆ ๊ฐ•๋„์™€ ๋‚œ์ˆ˜ ์‚ฌ์šฉ

Generator Generator ๊ฐ์ฒด ํš๋“๊ฐ์ฒด ํš๋“ KeyGenerator kg = KeyGenerator.getInstance(โ€œDESโ€)

Page 12: Key Managemnet

12Computer Network Lab.

Key Generator(6/6)Key Generator(6/6)

Public final SecretKey generateKey() : ์ƒˆ๋กœ์šด ๋žœ๋ค SecretKey ๋ฅผ ์ƒ์„ฑ

Ex)

KeyGenerator kg = KeyGenerator.getInstance (โ€œDESโ€);

Kg.init(new SecureRandom());

SecretKey key = kg.generateKey();

ํ‚ค ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ

Page 13: Key Managemnet

13Computer Network Lab.

Algorithm-Specific Initialization(1/2)

: Java.security.KeyPairGenerator ์™€ javax.crypto.KeyGeneratorsms Algorithm-Specific Initialization ์˜ ๊ฐœ๋…์„ ์ง€์› - ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ •ํ•ด์ง„ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅ

Java.security.KeyPairGenerator ๋Š” Algorithm-Specific Initialization ์„ ์œ„ํ•œ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ ํฌํ•จ

Public void initialize(AlgorithmParameterSpec params) throws

InvalidAlgorithmParameterException : ๋งŒ์ผ AlgorithmParameterSpec ๊ฐ์ฒด๊ฐ€ ์ธ์ •๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด , ์˜ˆ์™ธ์ฒ˜๋ฆฌ

Page 14: Key Managemnet

14Computer Network Lab.

javax.crypto.KeyGenerator ๋Š” Algorithm-Specific Initialization ์„ ์œ„ํ•œ ๋‘ ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ ํฌํ•จ Public final void init(AlgorithmParameterSpec params) throws

InvalidAlgorithmParameterException

: ๋งŒ์ผ AlgorithmParameterSpec ๊ฐ์ฒด๊ฐ€ ์ธ์ •๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด , ์˜ˆ์™ธ์ฒ˜๋ฆฌ

Public final void init(AlgorithmParameterSpec params,

SecureRandom random) throws

InvalidAlgorithmParameterException

: ๋งŒ์ผ AlgorithmParameterSpec ๊ฐ์ฒด๊ฐ€ ์ธ์ •๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด , ์˜ˆ์™ธ์ฒ˜๋ฆฌ

Algorithm-Specific Initialization(2/2)

Page 15: Key Managemnet

15Computer Network Lab.

Key Translator(1/8)Key Translator(1/8)

Problem) ๋””์Šคํฌ์—์„œ์˜ ํ‚ค ์ €์žฅ , ๋„คํŠธ์›Œํฌ์—์„œ์˜ ํ‚ค ์ „์†ก Solution) ๋ฐ”์ดํŠธ ์—ด ๋‹จ์œ„๋กœ ํ‚ค ์ €์žฅ ๋˜๋Š” ์ „์†ก ๋ฐ”์ดํŠธ ์—ด๊ณผ vice versa ๋กœ Key ๊ฐ์ฒด ๋ณ€ํ™˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๋ณ€ํ™˜

ClassClass

java.crypto.SecretKeyFactoryjava.crypto.SecretKeyFactory

javax.crypto.spec.SecretKeySpecjavax.crypto.spec.SecretKeySpec

javax.security.KeyFactoryjavax.security.KeyFactory

Page 16: Key Managemnet

16Computer Network Lab.

SecretKeySpec

: javax.crypto.spec.SecretKeySpec ํด๋ž˜์Šค๋Š” ๋น„๋ฐ€ ํ‚ค์˜ ๋ฐ”์ดํŠธ ์—ด์„

๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ• . ๋‘ ๊ฐœ์˜ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šด . pubic SecretKeySpec(byte[] key, String algorithm) : ์ œ๊ณต๋œ ๋ฐ”์ดํŠธ ์—ด์„์„ ์‚ฌ์šฉํ•˜์—ฌ SecretKeySpec ์„ ์ƒ์„ฑ . Key ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ œ๊ณต . pubic SecretKeySpec(byte[] key, int offset, int len, String algorithm) : ์ œ๊ณต๋œ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์˜ Offset ์—์„œ ์‹œ์ž‘ํ•˜๋Š” len ๋ฐ”์ดํŠธ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ SecretKeySpec ์„ ์ƒ์„ฑ . ์ œ๊ณต๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ€์ง .

์˜ˆ์ œ ) SecureRandom sr = new SecureRandom(); Byte[] keyByte = new byte[20]; Sr.nextBytes(keyBytes); SecretKey key = new SecretKeySpec (keyBytes, โ€œHmacSHA1โ€);

Key Translator(2/8)Key Translator(2/8)

Page 17: Key Managemnet

17Computer Network Lab.

SecretKeyFactory SecretKeyFactory ํด๋ž˜์Šคํด๋ž˜์Šค : java.crypto.SecretKeyFactory ํด๋ž˜์Šค๋Š” getInstance() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ

SecretKeyFactory ๋ฅผ ์ƒ์„ฑ . ๋‘ ๊ฐœ์˜ ์ƒ์„ฑ์ž ๊ฐ€์ง . pubic static final SecretKeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException : ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด SecretKeyFactory ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„ ( ์˜ˆ :DES) ์ด ๋Œ€์นญ ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผํ•จ pubic static final SecretKeyFactory getInstance(String algorithm, String

provider) throws NoSuchAlgorithmException, NoSuchProviderException : ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ œ๊ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ , ์ƒˆ๋กœ์šด SecretKeyFactory ์ƒ์„ฑ

Key Translator(3/8)Key Translator(3/8)

-SecretKeyFactory ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด , KeySpec ์™€ SecretKey ์‚ฌ์—์„œ์˜ key translate ๊ฐ€ ์ž์œ ๋กญ๋‹ค

Page 18: Key Managemnet

18Computer Network Lab.

Key Translator(4/8)Key Translator(4/8)

From things to keysFrom things to keys: SecretKey ์—์„œ KeySpec ๋กœ์˜ translate ๋Š” SecretFactory ์˜

generatorSecret() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค pubic final SecretKey generateSecret(KeySpec keySpec) throws

InvalidKeySepcException :keySpec ์˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ , SecretKey ์ƒ์„ฑ . ๋งŒ์ผ KeySpec ์ด

์ธ์ •๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด , ์˜ˆ์™ธ์ฒ˜๋ฆฌ Ex) DES ํ‚ค ์ƒ์„ฑ pubic SecretKey makeDESKey(byte[] input, int offset) throws

NoSuchAlgorithmException, InvalidKeySepcException, InvalidKeySpecException {

SecretKeyFactory desFactory = SecretKeyFactory.getInstance(โ€œDESโ€);

KeySpec spec = new DESKeySpec(input, offset);

Return desFactory.generateSecret (spec);

}

Page 19: Key Managemnet

19Computer Network Lab.

Key Translator(5/8)Key Translator(5/8)

makeDESKey() ํ•จ์ˆ˜์˜ ๋‹จ๊ณ„

์˜ˆ์™ธ์‚ฌํ•ญ getInstance() ํ•จ์ˆ˜ -NoSuchAlgorithmException generatorSecret() ํ•จ์ˆ˜ -InvalidKeyException ( ์ •ํ™•ํ•˜์ง€ ์•Š์€ ํ‚ค ๊ธธ์ด ์ „๋‹ฌ )generatorSecret() ํ•จ์ˆ˜ -InvalidKeySpecException(KeySpec ์—์„œ ๋ถˆ์ธ์ • )

1.DES ํ‚ค๋ฅผ ์œ„ํ•œ ํ‚ค ์š”์†Œ์˜ ํš๋“ . SecretKey.getInstance() ๋ฅผ ์‚ฌ์šฉ2.KeySpec ์€ ์ œ๊ณต๋œ ๋ฐ”์ดํŠธ ์—ด๋กœ๋ถ€ํ„ฐ DES ํ‚ค ๋ฐ์ดํ„ฐ ํ‘œ์‹œ ์ƒ์„ฑ3.KeySpec ๋กœ๋ถ€ํ„ฐ์˜ SecretKey ์ƒ์„ฑ . generateSecret() ๋ฅผ ์‚ฌ์šฉ

Page 20: Key Managemnet

20Computer Network Lab.

Key Translator(6/8)Key Translator(6/8)

From keys to thingsFrom keys to things : SecretFactory ๋Š” SecretKey ๋กœ๋ถ€ํ„ฐ KeySpec ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ์†Œ์œ  Public final KeySpec getKeySpec(SecretKey key, Class keySpec)

throws

InvalidKeySpecException

: ์ฃผ์–ด์ง„ SecretKey ๋กœ ๋ถ€ํ„ฐ KeySpec ์ƒ์„ฑ . keySpec ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” ๋ฆฌํ„ด๋˜๋Š” ๊ฐ์ฒด์˜ ํ˜•ํƒœ ๊ฒฐ์ •

Ex)

public byte[] makeBytesFromDESKey(SecretKey key) throws NoSuchAlgorithmException, InvalidKeySepcException {

SecretKeyFactory desFactory = SecretKeyFactory.getInstance(โ€œDESโ€);

KeySpecSpec spec = (DESKeySpec) desFactory.getKey(key, DESKeySpec.class);

return spec.getKey();}

Page 21: Key Managemnet

21Computer Network Lab.

Key Translator(7/8)Key Translator(7/8)

KeyFactory KeyFactory ํด๋ž˜์Šคํด๋ž˜์Šค: Java.security.KeyFactory ํด๋ž˜์Šค๋Š” SecretKeyFactory ์™€ ์œ ์‚ฌ .

๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค์— ์ ์šฉPublic static final KeyFactory getInstance(String algorithm) throws

NoSuchAlgrithmException

: ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด KeyFactory ์ƒ์„ฑ์— ์‚ฌ์šฉ

: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„์€ ๋น„๋Œ€์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„์ด๊ฑฐ๋‚˜

์„œ๋ช…์•Œ๊ณ ๋ฆฌ์ฆ˜ ( ์˜ˆ :DSA) ์œผ๋กœ ํ•ด์•ผํ•จPublic static final KeyFactory getInstance(String algorithm, String provider)

throws NoSuchAlgrithmException, NoSuchProviderException

: ์ œ๊ณต๋œ ์ œ๊ณต์ž์˜ ์ด๋ฆ„์„ ๊ตฌํ˜„์— ์‚ฌ์šฉํ•˜์—ฌ , ์ƒˆ๋กœ์šด KeyFactory ์ƒ์„ฑ

Page 22: Key Managemnet

22Computer Network Lab.

Key Translator(8/8)Key Translator(8/8) PublicKey ๋˜๋Š” Privatekey ๋Š” KeySpec ์œผ๋กœ ๋ถ€ํ„ฐ์˜ ๋ณ€ํ™˜์—

generatePublic() ์™€ generatePrivate() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ Public final PublicKey generatePublic(KeySpec keySpec) throws

InvalidKeySpecException

: ์ง€์ •๋œ KeySpec ์„ PublicKey ์ƒ์„ฑ์— ์‚ฌ์šฉ : ๋งŒ์ผ KeySpec ์ด KeyFactory ์— ์ธ์ •๋˜์ง€ ์•Š์œผ๋ฉด , ์˜ˆ์™ธ์ฒ˜๋ฆฌ Public final PrivateKey generatePrivate(KeySpec keySpec) throws

InvalidKeySpecException

: ์ง€์ •๋œ KeySpec ์„ ๊ฐœ์ธํ‚ค ์ƒ์„ฑ์— ์‚ฌ์šฉ KeyFactory ๋Š” ๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค๋ฅผ ๋™์‹œ์— ์กฐ์ •ํ•˜๋Š” getKeySpec()

์„ ๊ฐ–๋Š”๋‹ค Public final KeySpec getKeySpec(Key key, Class keySpec) throws

InvalidKeySpecException

: ์ง€์ •๋œ ํ‚ค๋กœ ๋ถ€ํ„ฐ KeySpec ์ƒ์„ฑ

Page 23: Key Managemnet

23Computer Network Lab.

Key Agreement(1/7)Key Agreement(1/7)

: ๋‘ ๊ฐœ ์ด์ƒ์˜๋ถ€๋ถ„์— ๋™์ผํ•œ secret ๊ฐ’์„ ์†Œ์œ ํ•˜๊ฒŒ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ์„ธ์…˜ ํ‚ค์—์„œ๋„ ์‚ฌ์šฉ

ํŠน์ง• : ๋น„์•ˆ์ „ ์ฑ„๋„ ์‚ฌ์šฉ ( ์˜ˆ : ์ธํ„ฐ๋„ท ) ์ธ์ฆ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•จ ์ง์ ‘์ ์ธ ํ‚ค ์ „์†ก์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค ์‚ฌ์šฉ์ž๊ฐ€ n ์ผ์‹œ , n-1 ๋ฐ์ดํƒ€ ๊ตํ™˜ ํ•„์š”

Diffie-Hellman - ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ ๋จ - 1976 ๋…„๊ฒฝ ๋ฐœํ‘œ

Notation- p : prime number - g: primitive mod p- xm, x r : random number - ym, y r : public key

- y = g x mod pxr x m

x r

- k = g mod p= y mod p = y mod p

m

rx m

m

Page 24: Key Managemnet

24Computer Network Lab.

Key Agreement(2/7)Key Agreement(2/7)

1. p ์™€ g ์„ ํƒ . ๊ฐ€์ž…์ž์—๊ฒŒ ๋ฐฐํฌ

Marian

Robin

2. x ์„ ํƒ . y ๊ณ„์‚ฐ

3. y ๋กœ๋นˆ์—๊ฒŒ ์ „์†ก

2. x ์„ ํƒ . y ๊ณ„์‚ฐ3. y ๋งˆ๋ฆฌ์•ˆ์—๊ฒŒ ์ „์†ก

m

rr

r

mm

x r

k = g mod p= y mod p = y mod p

m

rx m

xr x m4. ๋™์ผํ•œ ์†Œ์œ 

m

Page 25: Key Managemnet

25Computer Network Lab.

Key Agreement(3/7)Key Agreement(3/7)

Javax.crypto.KeyAgreement :Javax.crypto.KeyAgreement ๋Š” ํ‚ค agreement ํ”„๋กœํ† ์ฝœ์„ ์บก์Šํ™” :SunJCE ๋Š” Diffie-Hellman ์ด ๊ธฐ๋ฐ˜์ด๋˜๋œ KeyAgreemnet ์ œ๊ณต KeyAgreement ๊ฐ์ฒด ํš๋“์„ ์œ„ํ•˜์—ฌ , getInstance() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ Public static final KeyAgreement getInstance(String algorithm) throws NosuchAlgorithmException : ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด KeyAgreement ์ƒ์„ฑ Public static final KeyAgreement getInstance(String algorithm, String

provider) throws NosuchAlgorithmException, NoSuchProviderException : ์ฃผ์–ด์ง„ ์ œ๊ณต์ž์˜ ์ด๋ฆ„์œผ๋กœ , ์ƒˆ๋กœ์šด KeyAgreement ์ƒ์„ฑ

Page 26: Key Managemnet

26Computer Network Lab.

Key Agreement(4/7)Key Agreement(4/7)

KeyAgreement KeyAgreement ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œPublic final void init (Key key) throws InvalidKeyException : ์ œ๊ณต๋œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ KeyAgreement ์ดˆ๊ธฐํ™” : ์˜ฌ๋ฐ”๋ฅธ ํ‚ค ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐœ์ƒPublic final void init (Key key, SecureRandom random) throws InvalidKeyException : ์ œ๊ณต๋œ ํ‚ค์™€ ๋‚œ์ˆ˜๋กœ KeyAgreement ์ดˆ๊ธฐํ™”Public final void init (Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException : ์ œ๊ณต๋œ ํ‚ค์™€ AlgorithmParameterSpec ์œผ๋กœ KeyAgreement ์ดˆ๊ธฐํ™”Public final void init (Key key, AlgorithmParameterSpec params,

SecureRandom random) throws

InvalidKeyException, InvalidAlgorithmParameterException

: ์ œ๊ณต๋œ ํ‚ค , AlgorithmParameterSpec, SecureRandom ๋กœ KeyAgreement ์ดˆ๊ธฐํ™”

Page 27: Key Managemnet

27Computer Network Lab.

Key Agreement(5/7)Key Agreement(5/7) Public final Key doPhase (Key key, boolean lastPhase) throws

InvalidKeyException, IllegalStateException

: ๊ณต๊ฐœ ํ‚ค ๊ฐ’ ๋ฆฌํ„ด . lastPhase ๋Š” ํ‚ค agreement ๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ์‹œ์ž‘ํ•œ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„ ์ง€์‹œ

Public final byte[] generateSecret() throws IllegalStateException :secret ๊ฐ’ ๋ฆฌํ„ด . KeyAgreement ์˜ ๋ชจ๋“  ๋‹จ๊ณ„ ๋ฏธ์‹คํ–‰์‹œ , ์˜ˆ์™ธ์ฒ˜๋ฆฌ Public final init generateSecret(byte[] sharedSecret, int offset) throws

IllegalStateException, ShortBufferException :offset ์—์„œ ์‹œ์ž‘ํ•œ ๋ฐฐ์—ด์— secret ๊ฐ’ write. ๋ฐฐ์—ด ๊ธธ์ด ๋ถˆ์ถฉ๋ถ„์‹œ

์˜ˆ์™ธ์ฒ˜๋ฆฌ Public final init generateSecret(String algorithm) throws

InvalidKeyException, IllegalStateException, NoSuchAlgorithmException

: ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ SecretKey ์— ๋Œ€ํ•œ secret ๊ฐ’ ๋ฆฌํ„ด

Secret ๊ฐ’ ์ถ”์ถœ

Page 28: Key Managemnet

28Computer Network Lab.

Key Agreement(6/7)Key Agreement(6/7)SKIP SKIP (Simple Key Internet Protocol)

Diffie-Hellman ์‚ฌ์šฉ์„ธ์…˜ ํ‚ค ์‚ฌ์šฉ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์™€ VPN(Virtual Private Key) ์—์„œ ์‚ฌ์šฉํ‚ค ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์„ธ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฒ ์ด์Šค์™€ ๋ชจ๋“ˆ ์ œ๊ณต

SKIP ๋ฒ ์ด์Šค์™€ ๋ชจ๋“ˆ ๊ฐ’์„ ์œ„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ ํด๋ž˜์Šค { String // 16 ์ง„๋ฒ•์œผ๋กœ ๋ชจ๋“ˆ ๊ฐ’์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ŠคํŠธ๋ง ์ •์˜ ๋ชจ๋“ˆ // BigInteger ์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ’ ์ƒ์„ฑ ๋ฒ ์ด์Šค // ๋ฒ ์ด์Šค ๊ฐ’ ์ƒ์„ฑ ์ €์žฅ // DHParamterSpec ์— ๋ชจ๋“ˆ๊ณผ ๋ฒ ์ด์Šค ๊ฐ’ ์ €์žฅ }

Page 29: Key Managemnet

29Computer Network Lab.

Key Agreement(7/7)Key Agreement(7/7)

1. Key Pair ์ƒ์„ฑ

2. ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ wait

3. ๊ณต๊ฐœ ํ‚ค ์ˆ˜์‹ 

4. KeyFactory ๋ฅผ ์ด์šฉ ํ‚ค ์žฌ๊ตฌ์„ฑ

5. ์ž์‹ ์˜ ๊ณต๊ฐœํ‚ค ์ „์†ก

6. Secret ๊ฐ’ ๊ณ„์‚ฐ

1.Key Pair ์ƒ์„ฑ2. ๋ช…๋ น ๋ผ์ธ์— host IP ์™€ ํฌํŠธ ์ž…๋ ฅํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ .

๊ณต๊ฐœ ํ‚ค ์ „์†ก

3. ๊ณต๊ฐœํ‚ค ์ˆ˜์‹ 

4. KeyFactory ๋ฅผ ์ด์šฉ ํ‚ค ์žฌ๊ตฌ์„ฑ

5. Secret ๊ฐ’ ๊ณ„์‚ฐ

7. Secret ๊ฐ’ ์ถœ๋ ฅ 6. Secret ๊ฐ’ ์ถœ๋ ฅ

์„œ ๋ฒ„ ํด๋ผ์ด์–ธํŠธ

Page 30: Key Managemnet

30Computer Network Lab.

1. Identity Key Management ์˜ ์ •์˜2. Key Holders

- Principal

- Identity

- Signer

- IdentityScope

4. KeyManager ๊ตฌํ˜„

๋ชฉ ์ฐจ

Page 31: Key Managemnet

31Computer Network Lab.

โ€ข Identity Key Management ๋ž€ ?โ€“ JDK 1.1 ์—์„œ java.security.Identity ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ

ํ‚ค๊ด€๋ฆฌ* JDK 1.2 ์—์„œ๋Š” Keystore-based Key Management ๋กœ ๋ฐ”๋€œ

โ€“ ๊ตฌ์„ฑโ€ข Identity

; ๊ณต๊ฐœํ‚ค์™€ ๊ด€๋ จ์ •๋ณด๋“ค์„ ํฌํ•จโ€ข Signer

; ๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค , ๊ทธ๋ฆฌ๊ณ  ๊ด€๋ จ์ •๋ณด๋“ค์„ ํฌํ•จโ€ข IdentityScope

; Identity ์˜ ๊ทธ๋ฃน์„ ํ‘œ์‹œํ•˜๋ฉฐ Identity ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง

The Identity Key Management Paradigm

Page 32: Key Managemnet

32Computer Network Lab.

The Identity Key Management Paradigm

Identity Scope (Marianโ€™s computer)Identity Scope (Marianโ€™s computer)

Identity Scope (Merry Men)Identity Scope (Merry Men)

Signer (Marian)๊ณต๊ฐœํ‚ค๊ฐœ์ธํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Signer (Marian)๊ณต๊ฐœํ‚ค๊ฐœ์ธํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Sheriff)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Sheriff)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Will)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Will)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Tuck)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Tuck)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Robin)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Identity (Robin)๊ณต๊ฐœํ‚ค

๊ธฐํƒ€ ์ •๋ณด๋“ค

Figure : Identity-based key management

Page 33: Key Managemnet

33Computer Network Lab.

Java.security For the Identity Key Management

InterfaceInterface

ClassClass

Principal

Signer

Identity

IdentityScope

Method getName()Method getName()

Constructor identity() identity(String name) identity(String name, IdentityScope scope)Method getPublicKey() setPulicKey(Publickey key) addCertificate(Certificate certificate) removeCertificate(Certificate certificate) Certificate[] getCertificates()

Constructor identity() identity(String name) identity(String name, IdentityScope scope)Method getPublicKey() setPulicKey(Publickey key) addCertificate(Certificate certificate) removeCertificate(Certificate certificate) Certificate[] getCertificates()

Constructor Signer() Signer(String name) Signer(String name, IdentityScope scope)Method getPrivateKey() setKeyPair(KeyPair pari)

Constructor Signer() Signer(String name) Signer(String name, IdentityScope scope)Method getPrivateKey() setKeyPair(KeyPair pari)

Constructor identityScope() identityScope(String name) identityScope(String name, IdentityScope scope)Method addIdentity(Identity identity) removeIdentity(Identity identity) getIdentity(String name) getIdentity(PublicKey key) getIdentity(Principal principal) size() identites()

Constructor identityScope() identityScope(String name) identityScope(String name, IdentityScope scope)Method addIdentity(Identity identity) removeIdentity(Identity identity) getIdentity(String name) getIdentity(PublicKey key) getIdentity(Principal principal) size() identites()

Page 34: Key Managemnet

34Computer Network Lab.

โ€ข Principal ์ธํ„ฐํŽ˜์ด์Šคโ€“ Identity ๋Š” java.security.principal ์ธํ„ฐํŽ˜์ด์Šค๋กœ

๊ตฌํ˜„โ€“ Principal ์€ ๋‹จ์ˆœํžˆ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค

โ€“ Methodโ€ข public abstract String getName();

Key Holder

Page 35: Key Managemnet

35Computer Network Lab.

โ€ข Identity ํด๋ž˜์Šคโ€“ ์‹ค์ œ ์„ธ๊ณ„์˜ ์‹ค์ฒด๋“ค ( ์‚ฌ๋žŒ์ด๋‚˜ ์กฐ์ง๊ฐ™์€ ) ์„ ํ‘œํ˜„โ€“ ํ‚ค์˜ ์†Œ์œ ์ž ํ™•์ธโ€“ ์ด๋ฆ„ , ๊ณต๊ฐœํ‚ค , ๊ณต๊ฐœํ‚ค๋ฅผ ์ฆ๋ช…ํ•˜๋Š” ์ฆ๋ช…์„œ ํฌํ•จ

โ€“ Constructorโ€ข public Identity (String name);

โ€ข public Identity (String name, IdentityScope scope)

throws KeyManagementException;

Key Holder

Page 36: Key Managemnet

36Computer Network Lab.

โ€“ Method( ๊ณต๊ฐœํ‚ค ๊ด€๋ฆฌ )

โ€ข public PublicKey getPublicKey ();

โ€ข public void setPublicKey (PublicKey key)throws KeyManagementException;

( ์ฆ๋ช…์„œ ๊ด€๋ฆฌ )

โ€ข public void addCertificate (Certificate certificate)throws KeyManagementException;

โ€ข public void removeCertificate (Certificate certificate)throws KeyManagementException;

โ€ข public Certificate[] getCertificates ();

Key Holder

Page 37: Key Managemnet

37Computer Network Lab.

โ€ข Signer ํด๋ž˜์Šคโ€“ ๊ฐœ์ธํ‚ค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€๋กœ ์ œ๊ณต๋˜๋Š” ์„œ๋ธŒํด๋ž˜์Šคโ€“ Method

โ€ข public PrivateKey getPrivateKey ();

โ€ข public final void setKeyPair (KeyPair pair)throws InvalidParameterException KeyException;

Key Holder

Page 38: Key Managemnet

38Computer Network Lab.

โ€ข IdentityScopeโ€“ Identity ์˜ ๊ทธ๋ฃน์„ ํ‘œ์‹œโ€“ Identity ์˜ ๊ฐ์ฒด ์ €์žฅโ€“ Identity ์˜ Scope ๋ผ๋Š” ๊ฐœ๋…์„ ์ œ์‹œโ€“ IdentityScope ์ž์ฒด๊ฐ€ Identity ๋กœ ๋‹ค๋ฅธ Scope ์—

์†ํ• ์ˆ˜ ์žˆ๋‹คโ€“ ๊ณต๊ฐœํ‚ค , ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋‹คโ€“ Identity ๋กœ ๋ถ€ํ„ฐ ์ƒ์† ๋ฐ›์€ ํด๋ž˜์Šค์ด๋ฏ€๋กœ Signer

์ผ์ˆ˜ ์—†๋‹ค

Key Holder

Page 39: Key Managemnet

39Computer Network Lab.

โ€“ Method( Identity ๊ด€๋ฆฌ )

โ€ข public abstract void addIdentity (Identity identity)throws

KeyManagementException;

โ€ข public abstract void removeIdentity (Identity identity)throws

KeyManagementException;

โ€ข public abstract int size ();

โ€ข public abstract Enumeration identites ();

โ€ข public abstract Identity getIdentity (String name);

โ€ข public abstract Identity getIdentity (PublicKey key);

โ€ข public Identity getIdentity (Principal principal);

Key Holder

Page 40: Key Managemnet

40Computer Network Lab.

โ€ข Key ์™€ Identity ๊ด€๋ฆฌ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„โ€“ java KeyManager -c keyfile signer algorithm strength

โ€“ java KeyManager -e keyfile idname outfile

โ€“ java KeyManager -i keyfile infile

โ€“ java KeyManager -r keyfile idname

โ€“ java KeyManager -l keyfile

KeyManager

Page 41: Key Managemnet

41Computer Network Lab.

โ€ข ๊ตฌํ˜„๋œ ํ•จ์ˆ˜๋“คโ€“ Constructor

protected KeyManager(String name, KeyPair pair) {

super(name);

try { setPublicKey(pair.getPublic()); }

catch (KeyManagementException kme) {}

mPrivateKey = pair.getPrivate();

mIdentities = new Hashtable();

}

KeyManager

Page 42: Key Managemnet

42Computer Network Lab.

โ€“ Name ์˜ Identity ํš๋“public synchronized Identity getIdentity(String name) {

Enumeration e = mIdentities.elements();

while (e.hasMoreElements()) {

Identity i = (Identity)e.nextElement();

if (i.getName().equals(name))

return i;

}

return null;

}

public Identity getIdentity(PublicKey key) {

return (Identity)mIdentities.get(key); }

KeyManager

Page 43: Key Managemnet

43Computer Network Lab.

โ€“ Identity ์ถ”๊ฐ€public synchronized void addIdentity(Identity identity)

throws KeyManagementException {

if(mIdentities.contains(identity))

throw new KeyManagementException("This

KeyManager already contains " + identity.getName() + ".");

if(mIdentities.containsKey(identity.getPublicKey()))throw new

KeyManagementException("This

KeyManager already contains "+ identity.getName() + "'s key.");

mIdentities.put(identity.getPublicKey(), identity);

}

KeyManager

Page 44: Key Managemnet

44Computer Network Lab.

โ€“ Identity ์‚ญ์ œ

public synchronized void removeIdentity(Identity identity)

throws KeyManagementException {

PublicKey key = identity.getPublicKey();

if(mIdentities.containsKey(key))

mIdentities.remove(key);

else

throw new KeyManagementException("This KeyManager

does not contain "+ identity.getName() + ".");

}

KeyManager

Page 45: Key Managemnet

45Computer Network Lab.

โ€“ ํ‚ค ํš๋“public synchronized PublicKey getPublicKey(String name) {

if(name.equals(getName()))

return getPublicKey();

return getIdentity(name).getPublicKey();

}

public PrivateKey getPrivateKey() { return mPrivateKey; }

KeyManager

Page 46: Key Managemnet

46Computer Network Lab.

โ€“ Identity ์ถ”๊ฐ€public void addIdentity(String name, PublicKey key)

throws KeyManagementException {

Identity i = new KeyManagerIdentity(name);

i.setPublicKey(key);

addIdentity(i);

}

KeyManager

Page 47: Key Managemnet

47Computer Network Lab.

โ€“ ์ธ์Šคํ„ด์Šค ํš๋“public static KeyManager getInstance(String file)

throws IOException, ClassNotFoundException {

ObjectInputStream in = new ObjectInputStream(new

FileInputStream(file));

KeyManager km = (KeyManager)in.readObject();

in.close();

km.mKeyFile = file;

return km;

}

KeyManager

Page 48: Key Managemnet

48Computer Network Lab.

โ€“ KeyManager ์ƒ์„ฑ

public static KeyManager create(String file, String name, KeyPair pair) {

KeyManager km = new KeyManager(name, pair);

km.mKeyFile = file;

return km;

}

KeyManager

Page 49: Key Managemnet

49Computer Network Lab.

โ€“ ์ €์žฅpublic synchronized void save() {

try {

ObjectOutputStream out = new ObjectOutputStream(new

FileOutputStream(mKeyFile));

out.writeObject(this);

out.close();

}

catch (Exception e) {

System.out.println("KeyManager.save: " + e.toString());

}

}

KeyManager

Page 50: Key Managemnet

50Computer Network Lab.

โ€“ KeyMangerIdentityprivate static class KeyManagerIdentity

extends Identity {

public KeyManagerIdentity(String name) { super(name); }

}

KeyManager

Page 51: Key Managemnet

51Computer Network Lab.

โ€ข Main ํ•จ์ˆ˜java KeyManager -c keyfile signer algorithm strength

if (option.indexOf("c") != -1) {

if (args.length < 5) { usage(); return; }

String signer = args[2]; String algorithm = args[3];

int strength = NumberFormat.getInstance().parse(args[4]).intValue();

System.out.println("Initializing the KeyPairGeneratro...");

KeyPairGenerator kpg = KeyPairGenerator.getInstance(algorithm);

kpg.initialize(strength);

System.out.println("Generating the key pair...");

KeyPair pair = kpg.genKeyPair();

KeyManager km = create(keyfile, signer, pair);

km.save(); System.out.println("Done."); }

KeyManager

Page 52: Key Managemnet

52Computer Network Lab.

java KeyManager -e keyfile idname outfile

else if (option.indexOf("e") != -1) {

if(args.length < 4) {usage(); return; }

String idname = args[2];

String outfile = args[3];

KeyManager km = getInstance(keyfile);

ObjectOutputStream out = new ObjectOutputStream(new

FileOutputStream(outfile));

PublicKey key = km.getPublicKey(idname);

out.writeObject(idname);

out.writeObject(key);

out.close();

System.out.println("done."); }

KeyManager

Page 53: Key Managemnet

53Computer Network Lab.

java KeyManager -i keyfile infile

else if (option.indexOf("i") != -1) {if (args.length < 3) { usage(); return; }String infile = args[2];KeyManager km = getInstance(keyfile);ObjectInputStream in = new ObjectInputStream(new

FileInputStream(infile));String idname = (String)in.readObject();PublicKey key = (PublicKey)in.readObject();in.close();km.addIdentity(idname, key);km.save();System.out.println("Done.");

}

KeyManager

Page 54: Key Managemnet

54Computer Network Lab.

java KeyManager -r keyfile idname

else if (option.indexOf("r") != -1) {

if (args.length < 3) { usage(); return; }

String idname = args[2];

KeyManager km = getInstance(keyfile);

Identity i = km.getIdentity(idname);

km.removeIdentity(i);

km.save();

System.out.println("done.");

}

KeyManager

Page 55: Key Managemnet

55Computer Network Lab.

java KeyManager -l keyfile

else if (option.indexOf("1") != -1) {

if (args.length < 2) { usage(); return; }

KeyManager km = getInstance(keyfile);

System.out.println("KeyManager contents of " + keyfile + ":");

System.out.println(" public and private key for " +

km.getName());

Enumeration e = km.identities();

while (e.hasMoreElements()) {

Identity i = (Identity)e.nextElement();

System.out.println(" public key for " + i.getName());

}

KeyManager

Page 56: Key Managemnet

56Computer Network Lab.

๋ชฉ ์ฐจ

1. ์ผ๋ฐ˜ ์‚ฌํ•ญ 2. KeyStore ๊ฐœ์š”

2.1 KeyStore ๊ตฌ์„ฑ2.2 KeyStore ๊ธฐ๋Šฅ๋“ค2.3 KeyStore ๋ฉ”์†Œ๋“œ ์„ค๋ช…

3. keytool ๊ฐœ์š”3.1 Keytool ๊ธฐ๋Šฅ๋“ค3.2 Keytool ๊ธฐ๋Šฅ ์„ค๋ช…

4. ์š” ์•ฝ

Page 57: Key Managemnet

57Computer Network Lab.

1. ์ผ๋ฐ˜ ์‚ฌํ•ญ

JDK1.2 API 1.1 ์—์„œ ์ œ๊ณตํ•˜๋˜ ๊ณ ๊ธ‰๊ธฐ๋Šฅ๊ณผ Public-key Encryption ์„ ๋”์šฑ ํ™•์žฅ ,

๋ณด์•ˆ๊ธฐ๋Šฅ ์ œ๊ณต JDK1.1 ์˜ ํ‚ค ๊ด€ ๋ฆฌ ๋Š” identity-based ์ด ๋ฉฐ , 1.2 ๋Š”

java.security.KeyStore ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต KeyStore : Private Key ์™€ Public Key, Certificates ๋ฅผ ๋ณด์œ ํ•˜๋Š”

handy box ๋กœ ํ•œ ์‚ฌ๋žŒ์„ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์š”๊ตฌ๋˜๋Š” ๋ชจ๋“  ์ •๋ณด๋ฅผ ํฌํ•จ . ๋‹น์‹ ์„ ๋‹ค๋ฅธ ์ด๋“ค์—๊ฒŒ ์ฆ๋ช…ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค . --> ์„œ๋ช…๋ฐ์ดํ„ฐ ๊ฐœ์ธํ‚ค

์‚ฌ์šฉ , ๊ณต๊ฐœํ‚ค์™€ ์ธ์ฆ์„œ ์ œ๊ณต ์‚ฌ๋žŒ๋“ค์ด ํ•ฉ๋ฒ•์ ์ž„์„ ํ™•์‹ ํ•˜๋„๋ก ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์žˆ๋‹ค .

ํ‚ค๊ด€๋ฆฌ ์š”๊ตฌ์‚ฌํ•ญ ํ•˜๋‚˜์˜ ๊ฐœ์ธ / ๊ณต๊ฐœํ‚ค ์Œ๋ณด๋‹ค ๋” ๋งŽ์ด ์†Œ์œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ด€๋ฆฌ๊ฐ€

์š”๊ตฌ๋จ

Page 58: Key Managemnet

58Computer Network Lab.

2. KeyStore ๊ฐœ์š”

๋‘๊ฐœ์˜ ์—”ํŠธ๋ฆฌ ํ˜•ํƒœ๋ฅผ ํฌํ•จ๊ฐœ์ธํ‚ค ์—”ํŠธ๋ฆฌ (Private key entry)

๊ณต๊ฐœํ‚ค์™€ ๋งคํ•‘๋˜์–ด ์ผ์น˜ํ•˜๋Š” ์ธ์ฆ์„œ์™€ ์—ฐ๊ณ„๋œ ๊ฐœ์ธํ‚ค๋ฅผ ํฌํ•จ .

--> ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ช…ํ•˜๊ณ  ์•”ํ˜ธ ๋ถ„๋ฐฐํ•˜๋Š”๋ฐ ์œ ์šฉ

์‹ ์šฉ ์ฆ๋ช… ์—”ํŠธ๋ฆฌ (trusted certificate entry) ๋‹น์‹ ์ด ์‚ฌ์‹ค์ž„ ( ์‹ ์šฉ ) ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•œ๋‹ค . ์ด๋Š” ๋ณด์•ˆ ์ •์ฑ… ์œ ํ‹ธ๋ฆฌํ‹ฐ , Policytool, ์‹ ์šฉ ์ฝ”๋“œ ์„œ๋ช…์ž์— ๋Œ€ํ•œ ๋ณด์•ˆ ์ •์ฑ… ์ •์˜์™€ ์—ฐ๊ณ„๋˜์–ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค .

๋ณ„์นญ๋“ค (aliases) ๋˜๋Š” ์งง์€ ์ด๋ฆ„์œผ๋กœ ์กฐ์ง์—”ํŠธ๋ฆฌ๋“ค์€ alias, Hashtable ๋˜๋Š” Properties ๊ฐ์ฒด ์ž‘์—…๊ณผ

์œ ์‚ฌํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ๋˜๊ฑฐ๋‚˜ ๊ฒ€์ถœ .

Page 59: Key Managemnet

59Computer Network Lab.

2.1 KeyStore ๊ตฌ์„ฑ ๋‘๊ฐœ์˜ ํ‚ค์Œ ์—”ํŠธ๋ฆฌ : ์• ํ”Œ๋ฆฟ ์„œ๋ช…๊ณผ email ๋ฉ”์‹œ์ง€๋“ค์„ ์„œ๋ช… ์„ธ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์ฆ์ฒด์ธ : Will ๊ณผ Tuck ๊ทธ๋ฆฌ๊ณ  Robin ์—๊ฒŒ

์ผ์น˜ํ•˜๋Š” ์ธ์ฆ ์ฒด์ธ (Marian ์„ ์•„๋Š” ์‚ฌ๋žŒ๋“ค์ด , ๊ทธ๋“ค์˜ ๊ณต๊ฐœํ‚ค์™€ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ )

๊ฐ ์—”ํŠธ๋ฆฌ์˜ ์‹๋ณ„ : alias ์ธ โ€œ CodeKeysโ€ ๋˜๋Š” โ€œ WillScarletโ€ ์—

์˜ํ•˜์—ฌ ์‹๋ณ„ํ•œ๋‹ค .

EmailKeys

PublicKeyPrivateKeyCertificates

RobinHood

Certificate

WillScarlet

Certificate

FriarTuck

Certificate

KeyStore(Marianโ€™s computer)

CodeKeys

PublicKeyPrivateKeyCertificates

์„ธ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์ฆ์ฒด์ธ

๋‘๊ฐœ์˜ ํ‚ค์Œ ์—”ํŠธ๋ฆฌ

( ๊ทธ๋ฆผ 5-2) KeyStore ๊ธฐ๋ฐ˜ ํ‚ค๊ด€๋ฆฌ

Page 60: Key Managemnet

60Computer Network Lab.

2.2 KeyStore ๊ธฐ๋Šฅ๋“ค

Getting( ํš๋“ ) Loading and saving( ๋กœ๋”ฉ๊ณผ ์ €์žฅ ) Adding private key entries ( ๊ฐœ์ธํ‚ค ์—”ํŠธ๋ฆฌ ์ถ”๊ฐ€ ) Adding trusted certificate entry( ์‹ ์šฉ ์ธ์ฆ ์—”ํŠธ๋ฆฌ

์ถ”๊ฐ€ ) Retrieving entries( ์—”ํŠธ๋ฆฌ ๊ฒ€์ถœ )

Page 61: Key Managemnet

61Computer Network Lab.

ํ‚ค๊ด€๋ฆฌ ๋ฐ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ / ์ฆ๋ช… Flow

์ธ์ฆ๊ธฐ๊ด€๊ณต๊ฐœํ‚ค ๋ฐ ์ธ์ฆ์„œ ๋“ฑ๋ก๊ด€๋ฆฌ

๊ณต๊ฐœํ‚ค์‚ฌ์šฉ์ž ,

์ธ์ฆ์„œ ์‚ฌ์šฉ์ž ...

๊ฐœ์ธ / ๊ณต๊ฐœํ‚ค์ƒ์„ฑ์ž ,

์ธ์ฆ์„œ ์ž‘์„ฑ์ž ...

Identity-basedSinger,

Identity...

KeyStore-based...

ํ‚ค๊ด€๋ฆฌ ํŒจ๋Ÿฌ๋‹ค์ž„

๊ณต๊ฐœํ‚ค๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ „์†ก

๊ณต๊ฐœํ‚ค ๋ถ„๋ฐฐ

๊ณต๊ฐœํ‚ค ๋“ฑ๋ก , CSR/ ์ธ์ฆ์„œ ์š”๊ตฌ ๋“ฑ๋ก

๊ณต๊ฐœํ‚ค ๋ฐ ์ธ์ฆ์„œ ์š”๊ตฌ

CodeKeys,EmailKeys,Certificate...

Page 62: Key Managemnet

62Computer Network Lab.

2.3 KeyStore ๋ฉ”์†Œ๋“œ ์„ค๋ช… (1)

GettingKeyStore ๋Š” abstract class ๋กœ getInstance(); ๋ฅผ

์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ์ ์ธ subclass ์–ป๋Š”๋‹ค . Public static final KeyStore getInstance() throws KeyStoreException

โ€ข ์ด ๋ฉ”์†Œ๋“œ๋Š” KeyStore ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฆฌํ„ดKeyStore ์˜ getInstance() ๋ฉ” ์†Œ ๋“œ ๋Š” KeyStore ์˜

subclass ๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•  ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ java.security ์†Œ์œ  ํŒŒ์ผ์˜ ๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค .

๋งŒ์ผ ๋ผ์ธ์ด ์†์‹ค๋œ๋‹ค๋ฉด , getInstance() ๋กœ ๊ธฐ๋ณธ KeyStore ๊ตฌ ํ˜„ , sun.security.tools.JavaKeyStore ์„ ์‚ฌ์šฉํ•œ๋‹ค .

Page 63: Key Managemnet

63Computer Network Lab.

2.3 KeyStore ๋ฉ”์†Œ๋“œ ์„ค๋ช… (2) Loading ๊ณผ saving

loading ๊ณผ saving ์„ ์ง€์› , passphrase(password) ๋ฅผ ํ†ตํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ์ˆ˜ํ–‰ ํ›„ ์ €์žฅ

public abstract void store(OutputStream stream, String password) throws IOException, NoSuchAlgotithmException, CertificateException

๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ๋Š” ์ ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ , ํ‚ค ์ €์žฅ ๋ฐ์ดํ„ฐ์— ์†์—ฌ์ง„ ๊ฒƒ์ด ์—†๋‹ค๋ฉด ์ผ๋ถ€ ๋ณด์žฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์ค‘์š”ํ•˜๋‹ค . ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๊ฒฝ์šฐ๋Š” ํ‚ค ์ €์žฅ์— ๋”ฐ๋ฅด๋Š” KeyStore ์˜ ๋ฉ”์‹œ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ์ €์žฅํ•œ๋‹ค .

๋กœ๋”ฉํ•˜์˜€์„ ๋•Œ KeyStoreโ€™s ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜ํ•œ ๋ฉ”์‹œ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ์ตœ๊ทผ์— ๊ณ„์‚ฐ๋œ ์ €์žฅ ๋ฉ”์‹œ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค . ๊ฒฐ๊ณผ ๋‹ค์ด์ œ์ŠคํŠธ ๊ฐ’์„ KeyStore ์— ์ €์žฅ๋œ๋‹ค .

๋กœ๋”ฉ๋  ๋•Œ ๋™์ผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋™์ผํ•œ ๋‹ค์ด์ œ์ŠคํŠธ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ํ•„์š”ํ•˜๋‹ค . ๋งŒ์ผ ๋‘ ๋‹ค์ด์ œ์ŠคํŠธ ๊ฐ’์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด , ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜์˜€๊ฑฐ๋‚˜ KeyStore ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ด๋‹ค .

Page 64: Key Managemnet

64Computer Network Lab.

2.3 KeyStore ๋ฉ”์†Œ๋“œ ์„ค๋ช… (3)

Adding private key entries ( ๊ฐœ์ธํ‚ค ์—”ํŠธ๋ฆฌ ์ถ”๊ฐ€ ) ๋‹น์‹ ์ด ๊ฐ€์ง„ ํ‚ค์Œ์„ KeyStore ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ์ด๋‹ค . ๊ณต๊ฐœํ‚ค์™€ ๋Œ€์‘๋˜๋Š” ๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์ฒด์ธ์„ ์ถ”๊ฐ€ ๊ณต๊ฐœํ‚ค์— ํฌํ•จ๋œ ๋ณธ์ธ์„œ๋ช… ์ธ์ฆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์ธ์ฆ์ฒด์ธ์„

์ถ”๊ฐ€

Public abstract void setKeyEntry(String alias, PrivateKey key, String passphrase, Certificate[] chain) throws KeyStoreException

String passphrase(subclass ๊ตฌํ˜„์— ๋”ฐ๋ฅด๋ฉฐ , ์ ์ ˆํžˆ ์ง€์ • ) Brain-dead protection : ๋‹จ์ˆœ์Šคํ‚ด , KeyStore ์ €์žฅ์‹œ ํ‰๋ฌธ์— passphase ์™€

๊ฐœ์ธํ‚ค๋ฅผ ์ €์žฅ , ใ…” passphrase ๋กœ ํ‚ค๋ณต๊ตฌ ๊ฐ€๋Šฅ Weak encryption : passphrase ์™€ ๊ฐœ์ธํ‚ค๊ฐ€ ๊ฒฐํ•จ , ์Šคํฌ๋žจ๋ธ”๋ง์— ์˜ํ•ด ๊ฐœ์ธํ‚ค

์•”ํ˜ธํ™” . ์บ์ฃผ์–ผ ์Šค๋ˆ„ํ”ผ์™€ ์•„๋งˆ์ถ”์–ด ํ•ด์ปค ๋ฐฉ์ง€

Page 65: Key Managemnet

65Computer Network Lab.

2.3 KeyStore ๋ฉ”์†Œ๋“œ ์„ค๋ช… (4)

Strong encryption : ๊ฐ€์žฅ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ passphrase ๊ธฐ๋ฐ˜ ์•”ํ˜ธํ™”์— ์‚ฌ์šฉ๋จ .( ์ œ 7 ์žฅ ์ฐธ์กฐ ) ์ด ์Šคํ‚ด์—์„œ passphrase ๋Š” ์„ธ์…˜ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ณ  , ์„ธ์…˜ํ‚ค๋Š” ๋Œ€์นญ ์•”ํ˜ธ์— ์‚ฌ์šฉ๋˜๋ฉฐ , ์ด๋Š” KeyStore ๋กœ ์ €์žฅ๋˜๊ธฐ ์ „์— ์ดˆ๊ธฐ ๊ฐœ์ธํ‚ค๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค . ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ์„œ ์ด๋Š” ๊ฐœ์ธํ‚ค๋ฅผ ์ˆจ๊ธฐ๊ธฐ์— ๊ฐ€์žฅ ํšจ๊ณผ์ ์ผ ์ˆ˜ ์žˆ๋‹ค .

์ผ์ฐ์ด ๋ณด์•„ ์™”๋˜ ๊ฒƒ store() ์™€ load() ์— ๋Œ€ํ•œ passphrase์˜ ์‚ฌ์šฉ๊ณผ๋Š” ๋‹ค๋ฆ„ . ์—ฌ๊ธฐ์„œ passphrase ๋ฉ”์†Œ๋“œ๋Š” ์ „์ฒด ํ‚ค ์ €์žฅ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค .

Page 66: Key Managemnet

66Computer Network Lab.

2.3 KeyStore ๋ฉ”์†Œ๋“œ ์„ค๋ช… (5)

Adding trused certificate entry( ์‹ ์šฉ ์ธ์ฆ ์—”ํŠธ๋ฆฌ ์ถ”๊ฐ€ ) setCertificateEntry() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ KeyStore ๋กœ ์ธ์ฆ์„ ์ถ”๊ฐ€

Public abstract setCertificateEntry(String alias certificate Exception)โ€ข ์ด ๋ฉ”์†Œ๋“œ๋Š” ์ฃผ์–ด์ง„ ์ธ์ฆ์„œ์™€ ํ•จ๊ป˜ alias ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค .โ€ข ๋งŒ์ผ alias ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ์ตœ๊ทผ์˜ ์ธ์ฆ์„œ๋Š” ์ƒˆ๋กœ์šด

๊ฒƒ์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค .

๋‹น์‹ ์€ ๋ชจ๋“  ์ธ์ฆ ์ฒด์ธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค . ๋งŒ์ผ ๋‹น์‹ ์ด ๋ˆ„๊ตฐ๊ฐ€์˜ ๊ณต๊ฐœํ‚ค์™€ ์ผ์น˜ํ•˜๋Š” ์ธ์ฆ ์ฒด์ธ์„ ์ˆ˜์‹ ํ•œ๋‹ค๋ฉด , ๋‹น์‹ ์€ ์‹ ์šฉ ์ธ์ฆ ์—”ํŠธ๋ฆฌ๋กœ ์ฒด์ธ์— ๊ฐ ์ธ์ฆ์„œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค .

Page 67: Key Managemnet

67Computer Network Lab.

2.3 KeyStore ๋ฉ”์†Œ๋“œ ์„ค๋ช… (6)

Retrieving entries( ์—”ํŠธ๋ฆฌ ๊ฒ€์ถœ )๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ๊ณต๊ฐœํ‚ค์— ํฌํ•จํ•˜๋Š” ์ธ์ฆ์„œ๋“ค์„ ๋ณด์œ ํ•จ .Get ๋ฉ”์†Œ๋“œ๋กœ ๊ฒ€์ถœ

Public abstract PrivateKey getPrivateKey(String alias, String passphrase) throws NoSuchAlgorithmException, UnrecoverableKeyException

๋‹น์‹ ์€ alias ์™€ ๊ด€๋ จ๋œ ๊ฐœ์ธํ‚ค๋ฅผ ๊ฒ€์ถœํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค . ์ฃผ์–ด์ง„ passphrase ๋Š” ๊ฐœ์ธํ‚ค๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ณดํ˜ธ (protection) ํ•˜๋Š” ๊ฒƒ์„ ์ทจ์†Œ (undo) ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค .

Page 68: Key Managemnet

68Computer Network Lab.

3. keytool ๊ฐœ์š” Keytool ์€ java.security.KeyStore ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ช…๋ น๋ผ์ธ

์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค . KeyStore ๊ฐœ๋…

๊ฐœ์ธํ‚ค , ๊ณต๊ฐœํ‚ค์™€ ์ธ์ฆ์— ๋Œ€ํ•œ ๋‹จ์ˆœ database ์ด๋ฉฐ , ์—”ํŠธ๋ฆฌ๋Š” alias ์œผ๋กœ ์‹๋ณ„ ๋ฐ ์ฐธ์กฐํ•œ๋‹ค .

๊ธฐ๋ณธ์ ์œผ๋กœ KeyStores ๋Š” hard disk ์— ํŒŒ์ผ๋กœ ์ €์žฅ , ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด KeyStore ๋กœ ์ ํ•ฉ

keytool ํ™œ์šฉ ( ๊ธฐ๋ณธ ๊ตฌํ˜„์œผ๋กœ ๋ณ€ํ™”๋  ๊ฒƒ์ž„ ) KeyStore ๋Š” ํŒŒ์ผ ๋‹ค์ˆ˜๊ฐœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค . ๋งŒ์•ฝ ๋‹น์‹ ์ด keytool ์„ ์‚ฌ์šฉํ•  ๋•Œ KeyStore ํŒŒ์ผ์„ ๋ช…์‹œํ•˜์ง€

์•Š์•˜๋‹ค๋ฉด ์‚ฌ์ „ ์„ค์ •๋œ ํŒŒ์ผ์ด ์‚ฌ์šฉ , ์ด๋Š” .keyStore ํŒŒ์ผ๋กœ ๋ถˆ๋ฆฌ๊ฒŒ ๋˜๋ฉฐ HOMEDRIVE ์™€ HOMEPATH

ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์˜ํ•ด ๊ฒฐ์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ์— ๋†“์—ฌ์ง„๋‹ค . ๋˜๋Š” .keyStore ๋Š” JDK ์„ค์น˜๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•œ๋‹ค .

Page 69: Key Managemnet

69Computer Network Lab.

3.1 keytool ๊ธฐ๋Šฅ๋“ค

Creating a key pair( ํ‚ค์Œ ์ƒ์„ฑ )

Ubiquitous options and defaults ( ์–ด๋””์„œ๋‚˜ ์žˆ๋Š” ์˜ต์…˜๊ณผ ๊ธฐ๋ณธ์„ค์ • )

Inspecting the KeyStore ( ํ‚ค ์ €์žฅ ๋ฉด๋ฐ€๊ฒ€์‚ฌ )

Generating a CSR(Certificate Signing Request ์ƒ์„ฑ )

Importing certificates ( ์ธ์ฆ์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ )

Other options ( ๋‹ค๋ฅธ ์˜ต์…˜๋“ค )

Changing the default KeyStore class ( ๊ธฐ๋ณธ์„ค์ • ํ‚ค ์ €์žฅ ํด๋ž˜์Šค ๋ณ€๊ฒฝ )

Page 70: Key Managemnet

70Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (1)

Creating a key pair( ํ‚ค์Œ ์ƒ์„ฑ )๋‹น์‹ ์€ โ€“ genkey ๋ช…๋ น ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค์Œ์„ ์ƒ์„ฑC:\keytool โ€“genkey โ€“alias Jonathan โ€“keyalg DSA โ€“keysize 1024 โ€“dname

โ€œCN=Jonathan Knudsen, OU=Technical Publications, O=Oโ€™Reilly & Associates, C=USโ€ โ€“keypass buendia โ€“storepass buendia

C:\

- dname ์ด ์—”ํŠธ๋ฆฌ๋Š” ๋šœ๋ ทํ•œ ์ด๋ฆ„ (DN:distinguished name)* ์„ ๋ช…์‹œ ( ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ )

CN( ๊ณต์šฉ ์ด๋ฆ„ ) : ๋‹น์‹ ์˜ ์ด๋ฆ„ OU( ์กฐ์ง ๋‹จ์œ„ ) ๋‹น์‹ ์ด ์†ํ•˜๋Š” ๋‹น์‹  ์กฐ์ง์˜ ๋ถ€์„œ O( ์กฐ์ง ) : ๋‹น์‹ ์˜ ์กฐ์ง L( ์œ„์น˜ ) : ํ†ต์ƒ , ์‹œ S( ์ •๋ถ€ ) : ์ •๋ถ€ ๋˜๋Š” ์ฃผ C( ๋‚˜๋ผ ) : ๋‚˜๋ผ

Page 71: Key Managemnet

71Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (2)

- keypass์ด ๋‹จ๊ณ„๋Š” ์ƒˆ๋กœ์šด ํ‚ค์Œ์˜ ๊ฐœ์ธํ‚ค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค . ์ฃผ ) ๋ˆ„๊ตฌ๋“ ์ง€ ๋‹น์‹ ์˜ ์–ด๊นจ ๋„˜์–ด๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค . ์ถ”๊ฐ€์ ์œผ๋กœ KeyStore ๊ตฌํ˜„์— ์ ์šฉ๋  ์‹ค์งˆ์ ์ธ ๋ณดํ˜ธ๋ฅผ ๋‹น์‹ ์€ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค .

- storepass์ด passphrase ๋Š” ์ „์ฒด ํ‚ค ์ €์žฅ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค . ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํ‚ค ์ €์žฅ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•˜์—ฌ โ€“ genkey ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ , ์ด ์˜ต์…˜์œผ๋กœ KeyStore ์˜ passphrase ๋ฅผ ์„ค์ •ํ•œ๋‹ค . ์ดํ›„์— KeyStore ์— ๋”ฐ๋ฅธ ๋™์ž‘์€ ๋™์ผํ•œ passphrase ํƒ€์ดํ”„๋ฅผ ์š”๊ตฌํ•œ๋‹ค .

Page 72: Key Managemnet

72Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (3)

Ubiquitous options and defaults ( ์–ด๋””์„œ๋‚˜ ์žˆ๋Š” ์˜ต์…˜๊ณผ ๊ธฐ๋ณธ์„ค์ • )keytool ์˜ ๋‹ค์–‘ํ•œ ์˜ต์…˜๋“ค์€ ์–ด๋Š ๋ช…๋ น์–ด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค . ์ด๊ฒƒ๋“ค์€ โ€“

keystore, -storepass, ๊ทธ๋ฆฌ๊ณ  โ€“ v๊ฐ€ ์žˆ๋‹ค .keytool ์€ ๋‹น์‹ ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์— ์žˆ์–ด์„œ , ์˜ต์…˜์„ ์žƒ์–ด๋ฒ„๋ฆฌ๋”๋ผ๋„ ๊ธฐ๋ณธ์„ค์ •์ด ์žˆ์–ด์„œ ๊ด€๋Œ€ํ•˜๋‹ค . ๋งŒ์ผ ์—†๋‹ค๋ฉด , keytool ์€ ๋‹น์‹ ์ด ์žƒ์–ด๋ฒ„๋ฆฐ ์ •๋ณด๋ฅผ ์ฆ‰์‹œ ์•Œ๋ ค ์ค„ ๊ฒƒ์ด๋‹ค .

<ํ‘œ 5-1> keytool ์˜ต์…˜๋“ค์˜ ๊ธฐ๋ณธ์„ค์ • ๊ฐ’

์˜ต์…˜ ๊ธฐ๋ณธ ์„ค์ •๊ฐ’-alias mykey-keyalg DSA-keysize 1024-sigalg DSA/SHA-1-validity 90-KeyStore ๊ธฐ๋ณธ์„ค์ • .KeyStore ํŒŒ์ผ-file ํ‘œ์ค€ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ

Page 73: Key Managemnet

73Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (4)

Inspecting the KeyStore ( ํ‚ค ์ €์žฅ ๋ฉด๋ฐ€๊ฒ€์‚ฌ ) KeyStore ์˜ ๋‚ด์šฉ์„ ๋ณด๊ธฐ ์œ„ํ•˜์—ฌ โ€“ list ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค .

C:\keytool โ€“list โ€“storepass buendia

Your KeyStore contains 1 entry:

jonathan, Mon Jan 12 16:16:59 EST 1998, KeyEntry,

Certificate MD5 Fingerprint: 56:E0:FD:24:13:6c:51:C0:D9:57:B4:33:7F:79:A8:a4

C:\

โ€“v ์˜ต์…˜์„ โ€“ list ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด , ๋‹น์‹ ์€ ๋” ๋งŽ์€ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์ถœ๋ ฅ ๊ถ๊ทน์ ์œผ๋กœ ํ•˜๋‚˜์˜ KeyStore ์—”ํŠธ๋ฆฌ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•˜์—ฌ โ€“ alias ์˜ต์…˜์„ ์‚ฌ์šฉ .

C:\ keytool โ€“list โ€“alias Jonathan โ€“storepass buendia

Page 74: Key Managemnet

74Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (5) Generating a CSR( ์ธ์ฆ ์„œ๋ช… ์š”๊ตฌ์„œ ์ƒ์„ฑ )

์‹ค์ œ์ ์ธ ์ธ์ฆ์„œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•˜์—ฌ , ๋‹น์‹ ์€ CSR ์ƒ์„ฑ์„ ์š”๊ตฌํ•˜๋ฉด , ์ธ์ฆ ๊ธฐ๊ด€ (CA) ์— ์˜ํ•ด ์„œ๋ช…๋œ๋‹ค .(signed)

CSR ์€ ๋‹น์‹ ์— ๊ด€ํ•œ ๊ณต๊ฐœํ‚ค์™€ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํŠน๋ณ„ํ•œ ํŒŒ์ผ์ž„ ์ด๋Š” ๋‹น์‹ ์˜ ๊ฐœ์ธํ‚ค๋กœ ์„œ๋ช…๋œ๋‹ค . ๋‹น์‹ ์ด CSR ์„ CA ๋กœ ์†ก๋ถ€ํ• ๋•Œ , CA ๋Š” ๋‹น์‹ ์˜ ์‹ ์› (identity) ๋ฅผ

๊ฒ€์‚ฌํ•˜๊ณ  CSR ์˜ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ฆ๋ช… (Authenticity) ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค .

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์˜ ์ธ์ฆํ•จ์„ ์•Œ๋ฆฌ๊ณ  , CA ์˜ Private key ๋กœ ์„œ๋ช…ํ•˜์—ฌ , ๋‹น์‹ ์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ํ™•์ธ (verifies) ํ•œ๋‹ค .

CSR ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•˜์—ฌ -csr ๋ช…๋ น์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ์˜ˆ์ œC:\ keytool -csr -alias Jonathan -file Jonathan -file Jonathan.csr -keypass buendia -storepass buendia -vCertification request stored in file <Jonathan.csr>.Submit this to your certificate authority.

C:\

C:\ type Jonathan.csr (base64data ์ถœ๋ ฅ๊ฒฐ๊ณผ page 88 ์ฐธ์กฐ )

Page 75: Key Managemnet

75Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (6)

Importing certificates ( ์ธ์ฆ์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ) KeyStore ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋‘ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์กด์žฌํ•œ๋‹ค .

์ฒซ๋ฒˆ์งธ ๊ฒฝ์šฐ , ๋‹น์‹ ์€ CSR ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ CA ๋กœ๋ถ€ํ„ฐ ์ธ์ฆ์„œ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค . ์ด ๊ฒฝ์šฐ์— ๋‹น์‹ ์˜ CSR ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ ๊ฐœ์ธํ‚ค ์—”ํŠธ๋ฆฌ๋กœ ์ธ์ฆ๊ด€๊ณ„๋ฅผ ์š”๊ตฌํ•  ๊ฒƒ์ด๋‹ค .

๋‘๋ฒˆ์งธ ๊ฒฝ์šฐ , ๊ทธ ๋ฐ–์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ trusted certificate entry ๋ฅผ ๋งŒ๋“ค๊ธฐ

์œ„ํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค .

๋‹ค๋ฅธ ๊ฒฝ์šฐ keytool ์˜ โ€“ import ๋ช…๋ น ์˜ต์…˜ ์‚ฌ์šฉ keytool ์€ RFC1421 ์—์„œ ๊ธฐ์ˆ ๋œ ๊ฒƒ๊ณผ ๊ฐ™์ด โ€œ printable encodingโ€ ์—

๋Œ€ํ•ด , ์–ด๋–ป๊ฒŒ X.509 ์ธ์ฆ์„œ๋ฅผ Import ํ•˜๋Š”์ง€๋ฅผ ์•ˆ๋‹ค . ์ด ํฌ๋งท์€ header line ๊ณผ footer line ์ด ์žˆ์œผ๋ฉฐ , body ๋Š” base64data ์ด๋‹ค .(base64์— ๊ด€ํ•œ ์ข€๋” ์ƒ์„ธํ•œ ์ •๋ณด๋Š” ์ œ 1 ์žฅ๊ณผ ๋ถ€๋ก B ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค .) --> (base64data ์ถœ๋ ฅ๊ฒฐ๊ณผ page 88 ์ฐธ์กฐ )

Page 76: Key Managemnet

76Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (7) Other options ( ๋‹ค๋ฅธ ์˜ต์…˜๋“ค )

-selfcert : ๊ฐœ์ธํ‚ค ์—”ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์ž์‹ ์˜ ์„œ๋ช… ์ธ์ฆ์„ keytool ๋กœ ์žฌ์ƒ์„ฑ , ๊ฐœ์ธํ‚ค ์—”ํŠธ๋ฆฌ๋ฅผ ๋ณ„๋„์˜ ์ด๋ฆ„ (Distinguished Name) ์œผ๋กœ ๋ณ€๊ฒฝ , ์˜ต์…˜์€ <ํ‘œ 5-2> ์˜ โ€“ genkey ์™€ ๊ฐ™์ด ๋Œ€๋ถ€๋ถ„์˜ ๋™์ผํ•œ ์˜ต์…˜๋“ค์„ ํ—ˆ์šฉ

-export : ํŒŒ์ผ์— ์ธ์ฆ์„œ๋ฅผ ๋ณด๊ด€ (save) ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ณด๋‚ธ๋‹ค . ์—”ํŠธ๋ฆฌ๋ฅผ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•˜์—ฌ โ€“ alias ์˜ต์…˜์„ ์‚ฌ์šฉ , ์ถœ๋ ฅ ํŒŒ์ผ์„ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•˜์—ฌ โ€“file ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค .

-printcert : ํŒŒ์ผ์— ํฌํ•จ๋œ ์ธ์ฆ์„œ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค . ๋‹จ์ˆœํ•˜๊ฒŒ ํŒŒ์ผ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์€ โ€“ file ์„ ์‚ฌ์šฉํ•œ๋‹ค . ์ด ๋ช…๋ น์€ KeyStore ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค .

-keyclone : ๊ฐœ์ธํ‚ค ํ‚ค์ €์žฅ ์—”ํŠธ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค . -alias, -dest, -keypass, -new ์˜ต์…˜๋“ค์„ ํ—ˆ์šฉํ•œ๋‹ค .

Page 77: Key Managemnet

77Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (8)

-storepasswd : ํ‚ค ์ €์žฅ์— ๋Œ€ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค . ๋ชจ๋“  ๋‹ค๋ฅธ ๋ช…๋ น๋“ค๊ณผ ๊ฐ™์ด ์ดˆ๊ธฐ ํ‚ค์ €์žฅ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ โ€“ storepass ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ ๋ช…์‹œํ•œ๋‹ค . ์ƒˆ๋กœ์šด ํ‚ค์ €์žฅ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” โ€“ new ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œํ•œ๋‹ค .

-keypasswd : ํ‚ค ์ €์žฅ์—์„œ ๊ฐœ์ธํ‚ค ์—”ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค . ์ด๋Š” <ํ‘œ 5-4> ์—์„œ ๋‚˜์—ดํ•œ ์˜ต์…˜๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค .

-delete : ํ‚ค ์ €์žฅ์œผ๋กœ๋ถ€ํ„ฐ ์—”ํŠธ๋ฆฌ ์ œ๊ฑฐ (remove). ์—”ํŠธ๋ฆฌ๋ฅผ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด โ€“ alias ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค .

-help : ์ด ๋ช…๋ น ์˜ต์…˜์€ ๋ชจ๋“  keytool ์˜ ์˜ต์…˜๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค .

Page 78: Key Managemnet

78Computer Network Lab.

3.2 Keytool ๊ธฐ๋Šฅ์„ค๋ช… (9)

Changing the default KeyStore class ( ๊ธฐ๋ณธ์„ค์ • ํ‚ค ์ €์žฅ ํด๋ž˜์Šค ๋ณ€๊ฒฝ ) ๊ธฐ๋ณธ์„ค์ • keytool ์€ sun.security.tools.JavaKeyStore ์„ ์‚ฌ์šฉํ•˜์—ฌ

์ž‘์„ฑํ•œ๋‹ค . ๋งŒ์ผ ๋‹น์‹ ์ด ์ž์‹ ๋งŒ์˜ KeyStore ๊ตฌํ˜„์„ write ํ•œ๋‹ค๋ฉด , ๋‹น์‹ ์€ ๋‹น์‹ ์˜ ํ‚ค์™€ ์ธ์ฆ์„œ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ keytool ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค . ๋‹น์‹ ์€ JDK ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ‘์˜ lib/security ๋ฅผ ์ฐพ๊ณ  , java.security ํŒŒ์ผ์˜ ํ•œ ๋ผ์ธ์„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค .

KeyStore=sun.security.tools.JavaKeyStore

๋งŒ์ผ ๋‹น์‹ ์˜ KeyStore oreilly.jonathan.security.SuperDuperKeyStore ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด , ์˜ˆ์ œ์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ์ด ์š”๊ตฌ๋œ๋‹ค .

KeyStore=oreilly.jonathan.security.SuperDuperKeyStore

Page 79: Key Managemnet

79Computer Network Lab.

4. ์š” ์•ฝ

๋ณธ 5 ์žฅ์„ ํ†ตํ•˜์—ฌ , Key ๊ด€๋ฆฌ์— ๊ธฐ๋ณธ๊ฐœ๋…์„ ๋ถ„์„ํ•จ

ํ‚ค์ƒ์„ฑ , ๋ถ„๋ฐฐ , ๋™์˜ , identity-based, KeyStore-based ์˜ ๊ฐ ๋‹จ๊ณ„์˜ ๊ฐœ๋…๊ณผ ํ”„๋กœ๊ทธ๋žจ์„ ํŒŒ์•…

ํ‚ค๊ด€๋ฆฌ ๋ฐ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ / ์ฆ๋ช… Flow ์ฐธ์กฐ (7 ์ชฝ )