Lect 3
Lect 3
Concepts: e.g. ciphers, signatures, message digests, …
Algorithms: e.g. RSA, DSA, MD5, …
Implementations: supplied by different cryptographic
providers, e.g. Sun
java.security.*
Java Cryptography Extension (JCE)
Supports encryption/decryption
javax.crypto.*
In the past, separate from standard JDK due to US export
restrictions
Now integrated into J2SE
object for creating and using a message digest Provided by different providers
Default provider: SUN / SunJCE
These objects are created using factory methods
getInstance()
A static method (i.e. class method), does not need an General idea of Java cryptography: encapsulation
instance to run. Invoked directly from a class (similar to
Math.sqrt(), Integer.valueOf(), …) Algorithm/implementation details hidden from programmers
Returns an instance (i.e. object) of a class Only need to know the concepts
E.g. MessageDigest.getInstance(“MD5”) is invoked on
the MeesageDigest class directly, to create an object of
class MessageDigest
3 4
Random Numbers Keys in Java
What is random? Recall: what is a key?
Uniform distribution; independence A parameter to a cipher (e.g. the value n in rot-n)
Why need random? A numeric value, or equivalently, a bit string
Many cryptographic algorithms use random numbers for Different values of key gives different encryption results
initialization
As session information to avoid some attacks Key size:
Usually long (e.g. 512 bits) for security (prevent brute-force
How to generate random numbers?
attack)
Unfortunately, computers are deterministic, and are bad at
generating true random numbers Too long will make program slow
Pseudorandom number generator (PRNG): looks random In Java, a key is represented by an interface
(unpredictable) Hides implementation detail
java.util.Random
Not secure enough
java.security.SecureRandom: a secure PRNG
5 6
7 8
Key Generators More on Key Generators
How to create a key? Examples:
Step 1: Obtain a key generator object for the specific A 1024-bit key pair for DSA signatures
algorithm KeyPairGenerator kpg = KeyPairGenerator.getInstance(“DSA”);
java.security.KeyPairGenerator (for public/private kpg.initialize(1024);
key pairs) KeyPair kp = kpg.genKeyPair();
javax.crypto.KeyGenerator (for secret keys)
A DES key
Step 2: Initialize the key generator KeyGenerator kg = KeyGenerator.getInstance(“DES”);
E.g. abstract void initialize(int strength, kg.init(new SecureRandom());
SecureRandom sr) SecretKey key = kg.generateKey();
Step 3: Ask the key generator to generate a key (or
key pair) Note: public (KeyPairGenerator) and private
E.g. abstract KeyPair genKeyPair() (KeyGenerator) key generators have different method
names, e.g. initialize() vs. init()
E.g. abstract SecretKey generateKey()
9 10
11 12
SecretKeyFactory (for Secret
Key Factories Keys)
A KeyFactory converts a Key object to/from its Example: from things to keys
specification (a KeySpec) // a method to create a DES key from a byte array
public SecretKey makeDESKey(byte[] input) {
(No, this is not a factory for generating keys.) SecretKeyFactory desFactory =
SecretKeyFactory.getInstance(“DES”);
Relationships: KeySpec spec = new DESKeySpec(input);
return desFactory.generateSecret(spec);
KeyFactory KeyGenerator }
13 14
15 16