Network Sevurity and Cryptography
Download
Report
Transcript Network Sevurity and Cryptography
Homework
Study Java Cryptography
by
Reading the rest of slides
and
accessing Sun’s Java website:
http://java.sun.com
1
Goals
Learn about JAVA Crypto Architecture
How to use JAVA Crypto API’s
Understand the JCE (Java Cryptography Extension)
Be able to use java crypto functions (meaningfully) in your
code
JAAS (Java Authentication and Authorization Service)
(Refer Java web site for JAAS details)
JSSE (Java Secure Socket Extension)
(Refer Java web site for JSSE details)
2
Introduction
JDK Security API
First release of JDK Security introduced "Java Cryptography Architecture" (JCA)
Framework for accessing and developing cryptographic functionality
JCA encompasses
Core API for Java
Built around the java.security package
Parts of JDK 1.2 Security API related to cryptography
Architecture that allows for multiple and interoperable cryptography implementations
The Java Cryptography Extension (JCE) extends JCA
Includes APIs for encryption, key exchange, and Message Authentication Code (MAC)
3
Java Cryptography Extension (JCE)
Adds encryption, key exchange, key generation, message
authentication code (MAC)
Multiple “providers” supported
Keys & certificates in “keystore” database
Separate due to export control
4
JCE Architecture
App 1
API
App 2
JCE:
Cipher
KeyAgreement
KeyGenerator
SecretKeyFactory
MAC
SPI
CSP 1
CSP 2
5
Design Principles
Implementation independence and interoperability
"provider“ based architecture
Set of packages implementing cryptographic services
•
digital signature algorithms
Programs request a particular type of object
Various implementations working together, use each other's keys, or verify each other's
signatures
Algorithm independence and extensibility
Cryptographic classes providing the functionality
Classes are called engine classes, example Signature
Addition of new algorithms straight forward
6
Building Blocks
Key
Certificate
Keystore
Message Digest
Digital Signature
SecureRandom
Cipher
MAC
7
Engine Classes and SPI
Interface to specific type of cryptographic service
Defines API methods to access cryptographic service
Actual implementation specific to algorithms
For example : Signature engine class
Provides access to the functionality of a digital signature algorithm
Actual implementation supplied by specific algorithm subclass
"Service Provider Interface" (SPI)
Each engine class has a corresponding abstract SPI class
Defines the Service Provider Interface to be used by implementors
SPI class is abstract - To supply implementation, provider must subclass
8
JCA Implementation
SPI (Service Provider Interface)
say FooSpi
Engine
Foo
Algorithm
MyAlgorithm
Foo f = Foo.getInstance(MyAlgorithm);
9
General Usage
No need to call constructor directly
Define the algorithm reqd.
getInstance()
Initialize the keysize
init() or initialize()
Use the Object
generateKey() or doFinal()
10
java.security classes
Key
KeyPair
KeyPairGenerator
KeyFactory
Certificate
CertificateFactory
Keystore
MessageDigest
Signature
SignedObject
SecureRandom
11
Key
Types
SecretKey
PublicKey
PrivateKey
Methods
getAlgorthm()
getEncoded()
KeyPair= {PrivateKey, PublicKey}
12
KeyGenerator
Generates instances of key
Requires Algorithm
getInstance(algo)
Keylength, (random)
Initialize(param, random)
Generates required key/keypair
13
KeyFactory/SecretKeyFactory
Converts a KeySpec into Keys
KeySpec
Depends on the algorithm
Usually a byte[] (DES)
Could also be a set of numbers (DSA)
Required when the key is encoded and transferred across
the network
14
Certificate
Problem
Java.security.Certificate is an interface
Java.security.cert.Certificate is a class
Which one to use when you ask for a Certificate?
Import only the correct type
Avoid “import java.security.*”
Use X509Certificate
15
KeyStore
Access to a physical keystore
Can import/export certificates
Can import keys from certificates
Certificate.getPublicKey()
Certificate.getPrivateKey()
Check for certificate validity
Check for authenticity
16
keytool
Reads/writes to a keystore
Unique alias for each certificate
Password Encrypted
Functionality
Import
Sign Request
Export NOTE: Default is DSA !
17
Signature
DSA, RSA
Obtain a Signature Object
getInstance(algo)
getInstance(algorithm,provider)
18
Signature (signing)
Initialize for signing
initSign(PrivateKey)
Give the data to be signed
update(byte [] input) and variations
doFinal(byte [] input) and variations
Sign
byte[] Signature.sign() NOTE: Signature does not contain the
actual signature
19
Signature (verifying)
Initialize for verifying
initVerify(PublicKey)
Give the data to be verifieded
update(byte [] input) and variations
doFinal(byte [] input) and variations
Verify
boolean Signature.verify()
20
SignedObject
Signs and encapsulates a signed object
SignedObject(Serializable, Signature)
Recover
Object getContent()
byte[] getSignature()
Sign
Verify
Verify(PublicKey, Signature) ! Need to initialize the instance of the
signature
21
javax.crypto classes
Cipher
Mac
KeyGenerator
SecretKeyFactory
SealedObject
22
Cipher
DES, DESede, RSA, Blowfish, IDEA …
Obtain a Cipher Object
getInstance(algorithm/mode/padding)
or getInstance(algorithm)
or getInstance(algorithm, provider) eg “DES/ECB/NoPadding” or
“RSA”
Initialize
init(mode, key)
mode= ENCRYPT_MODE / DECRYPT_MODE
23
Cipher cont.
Encrypt/Decrypt
byte[] update(byte [] input) and variations
byte[] doFinal(byte [] input) and variations
Exceptions
NoSuchAlgorithmException
NoSuchPadding Exception
InvalidKeyException
24
SealedObject
Encrypts and encapsulates an encrypted object
Encrypt
SealedObject(Serializable, Cipher)
Recover
getObject(Cipher)
or getObject(key) Cipher mode should be different!!
25
Wrapper Class : Crypto.java
Adding a provider
public Crypto() { java.security.Security.addProvider(new
cryptix.provider.Cryptix());}
26
Enrcyption using RSA
public synchronized byte[] encryptRSA(Serializable obj, PublicKey kPub)
throws KeyException, IOException {
try {
Cipher RSACipher = Cipher.getInstance("RSA");
return encrypt(RSACipher, obj, kPub);
} catch (NoSuchAlgorithmException e) {
System.exit(1);
}
return null; }
27
Decryption using RSA
public synchronized Object decryptRSA(byte[] msgE, PrivateKey kPriv)
throws KeyException, IOException
{
try {
Cipher RSACipher = Cipher.getInstance("RSA");
return decrypt(RSACipher, msgE, kPriv);
} catch (NoSuchAlgorithmException e) {
System.exit(1);
}
return null; }
28
Creating a signature
public synchronized byte[] sign(byte[] msg, PrivateKey kPriv)
throws SignatureException, KeyException, IOException
{
// Initialize the signature object for signing
debug("Initializing signature.");
try {
Signature RSASig = Signature.getInstance("SHA-1/RSA/PKCS#1");
debug("Using algorithm: " + RSASig.getAlgorithm());
RSASig.initSign(kPriv);
RSASig.update(msg);
return RSASig.sign();
} catch (NoSuchAlgorithmException e) {
System.exit(1);
}
return null; }
29
Verifying a signature
public synchronized boolean verify(byte[] msg, byte[] sig, PublicKey kPub)
throws SignatureException, KeyException
{
// Initialize the signature object for verifying
debug("Initializing signature.");
try {
Signature RSASig = Signature.getInstance("SHA-1/RSA/PKCS#1");
RSASig.initVerify(kPub);
RSASig.update(msg);
return RSASig.verify(sig);
} catch (NoSuchAlgorithmException e) {
System.exit(1);
}
return false; }
30