SlideShare a Scribd company logo
GS: Chapter 4 Symmetric Encryption in  Java
Topics Blowfish Password-based encryption (PBE) Key storage Modes Cipher streams and IV (initialization vector) Sealed objects
Applications of symmetric encryptions File encryption Network encryption Database encryption Applications that require encryption of large amount of data.
Javax.crypto. KeyGenerator http://java.sun.com/j2se/1.4.1/docs/api/javax/crypto/KeyGenerator.html Provides the functionality of a (symmetric) key generator Key generators are constructed using one of the  getInstance  class methods.  KeyGenerator  objects are reusable, i.e., after a key has been generated, the same KeyGenerator object can be re-used to generate further keys.  There are two ways to generate a key: in an algorithm-independent manner, and in an algorithm-specific manner. The only difference between the two is the initialization of the object.
Javax.crypto. KeyGenerator Using KeyGenerator Create a new key generator: KeyGenerator keyGenerator = KeyGenerator.getInstance (“DESede”); Note:   DESede is a triple DES variant with three DES keys k1, k2, k3. The message is encrypted with k1 first, then decrypted with k2, and finally encrypted again with k3. This increases the key space and prevents brute force attacks.  Initialize the key generator with the size of the key: keyGenerator.init (168);  // initialized to 168 bits Generate the key object: Key myKey = keyGenerator.generateKey ( );
Java.security. Key http://java.sun.com/j2se/1.4.1/docs/api/java/security/Key.html   java.security  Interface Key All Superinterfaces:   Serializable   All Known Subinterfaces:   DHPrivateKey ,  DHPublicKey ,  DSAPrivateKey ,  DSAPublicKey ,  PBEKey ,  PrivateKey ,  PublicKey ,  RSAMultiPrimePrivateCrtKey ,  RSAPrivateCrtKey ,  RSAPrivateKey ,  RSAPublicKey ,  SecretKey   All Known Implementing Classes:   KerberosKey ,  SecretKeySpec
Java.security. Key The Key interface is the top-level interface for all keys. It defines the functionality shared by all key objects.  All keys have three characteristics:  The key  algorithm  for that key; An external  encoded form  for the key used when a standard representation of the key is needed outside the Java Virtual Machine, as when transmitting the key to some other party; The name of the  format  of the encoded key Keys are generally obtained through key generators, key factory, certificates, or various Identity classes used to manage keys.  Examples:  javax.crypto.KeyGenerator( ) ;  java.security.KeyFactory( ) ;
Javax.crypto. Cipher http://java.sun.com/j2se/1.4.1/docs/api/ public class  Cipher   extends  Object This class provides the functionality of a cryptographic cipher for encryption and decryption.  It forms the core of the Java Cryptographic Extension (JCE) framework. To use a Cipher:  getInstance( ), init( ), update( ), doFinal( ).
Javax.crypto. Cipher. getInstance( ) In order to create a Cipher object, the application calls the Cipher's  getInstance  method, and passes the name of the requested  transformation  to it.   static  Cipher   getInstance ( String  transformation)   Generates a  Cipher  object that implements the specified transformation. static  Cipher   getInstance ( String  transformation,  Provider  provider)   Creates a  Cipher  object that implements the specified transformation, as supplied by the specified provider. static  Cipher   getInstance ( String  transformation,  String  provider)   Creates a  Cipher  object that implements the specified transformation, as supplied by the specified provider.
Javax.crypto. Cipher. getInstance( ) Examples: Cipher cipher = Cipher.getInstance(" DES/CBC/PKCS5Padding ");  Cipher cipher = Cipher.getInstance(“DESede/ECB/PKCS5Padding”);
Javax.crypto. Cipher. init( ) Initialize an instance of Cipher: Declares the operating mode (ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE, UNWRAP_MODE) Pass a key (java.security.Key) to the cipher Example: Cipher.init (Cipher.ENCRYPT_MODE, myKey);  Note:  When a Cipher object is initialized, it loses all previously-acquired state. In other words, initializing a Cipher is equivalent to creating a new instance of that Cipher and initializing it.
Javax.crypto. Cipher. update( ) Pass the information to be encrypted/decrypted to the cipher: The information must be in the form of a byte array. Note: Ciphers typically buffer their output.  If the buffer has not been filled,  null  will be returned. Alternative update( ) methods: byte[ ]  update   (byte[] input) byte[ ] plaintext = myString.getBytes (“UTF8”); byte[ ] ciphertext = cipher.update (plaintext); int  update   (byte[ ] input, int inputOffset, int inputLen, byte[ ] output, int outputOffset)  Continues a multiple-part encryption or decryption operation (depending on how this cipher was initialized), processing another data part.
Javax.crypto. Cipher. doFinal( ) Finish the operation:   byte[ ]  doFinal ( )   Finishes a multiple-part encryption or decryption operation, depending on how this cipher was initialized.   byte[ ]  doFinal (byte[] input)   Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation. Example: Byte[ ] ciphertext = cipher.doFinal ( );
SimpleExample.java P.69: SimpleExample.java  (see  http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample output: > java SimpleExample "How are you doing?" Plain Message=How are you doing? Generating a TripleDES key... Done generating the key. Now encrypting the message Message Encrypted Ciphertext=-74-45759-44-115-19-8-56-99-47794393-45-107-41-125-127-233271855 Now decrypting the message Message decrypted Decrypted text: How are you doing?
BlowfishExample.java Blowfish keys can be any bit size from 8 to 448, as long as the number if divisible by 8. p.69:  BlowfishExample.java  (see  http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample output: > java BlowfishExample "It's a wonderful day!" Generating a Blowfish key... Done generating the key. Plaintext: 73 116 39 115 32 97 32 119 111 110 100 101 114 102 117 108 32 100 97 121 33 Ciphertext: -77 56 -88 61 -52 -12 -57 43 -10 66 -54 -98 -86 56 -86 51 -127 -125 30 48 -64 11 2 -37 -125 Decrypted text: It's a wonderful day!
Password-based encryption  (PBE) hashing  +  symmetric encryption The user-provided  password  is hashed by a  message digest algorithm , such as SHA. The hash value is then used to construct a  key  for a  symmetric encryption algorithm , such as Blowfish. The plaintext is then encrypted by the symmetric encryption algorithm. Problems? PBE is usually less secure, due to its smaller key space. Passwords may suffer ‘dictionary attack’. Two people might choose the same password, which would create two identical entries in the password file.
Password-based encryption  (PBE) PBE + salt + iteration count A  salt  is a randomly generated piece of data, say 64 bits, that is added to each password. The combined  salt+password  is used to generate the key. The key is then used to generate a symmetric cipher. For the purpose of decryption, the salt must be stored as part of the ciphertext. See figures on page 74.
Password-based encryption  (PBE)
Base64 Encoding Effective in representing ASCII data as 6-bit characters (save one bit per character) Widely used in networking transmissions of data; e.g., in MIME emails & other Internet-related applications Input: N bytes Number of output characters (N * 8 / 24) * 4, if N*8 % 24 is zero; (N * 8 / 24 + 1) * 4, otherwise. Example: N = 8 bytes. (64 / 24 + 1) * 4    12 characters See  http://nas.cl.uh.edu/yang/teaching/csci5939DatabaseSecurity/base64.ppt , RFC2045, and Appendix C.
Password-based encryption  (PBE)
Password-based encryption  (PBE) Random.nextBytes (byte[ ] bytes)  Generates random bytes and places them into a user-supplied byte array. public class  PBEKeySpec extends Object implements KeySpec A user-chosen password that can be used with password-based encryption (PBE).  The password can be viewed as some kind of raw key material, from which the encryption mechanism that uses it derives a cryptographic key.
Password-based encryption  (PBE) public class  SecretKeyFactory  extends Object This class represents a factory for secret keys.  Key factories are used to convert keys (opaque cryptographic keys of type  Key ) into key specifications (transparent representations of the underlying key material), and vice versa. Secret key factories operate only on secret (symmetric) keys.  Key factories are bi-directional, i.e., they allow to build an opaque key object from a given key specification (key material), or to retrieve the underlying key material of a key object in a suitable format.  Application developers should refer to their provider's documentation to find out which key specifications are supported by the  generateSecret  and  getKeySpec  methods.
Password-based encryption Twofish  encryption algorithm: A symmetric block cipher that accepts keys of any length, up to 256 bits; Among the new encryption algorithms being considered by the National Institute of Science and Technology (NIST) as a replacement for the DES algorithm; Highly secure and flexible; Works extremely well with large microprocessors, 8-bit smart card microprocessors, and dedicated hardware.  (Source:  http://www. wiley .com/ cda /product/0,,0471353817,00.html )
Password-based encryption An example program: PBE.java  (see  http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample PBE encryption/decryption: > java PBE -e sasquatch "Hello World!" yrVhjq5djco=eSIS1LbeAtu5KIKf5ntNhg== > java PBE -e sasquatch "Hello World!" lQ1lzMl8ONM=GBJFXSnpbltXowvJTmck1w== > java PBE -d sasquatch "lQ1lzMl8ONM=GBJFXSnpbltXowvJTmck1w==" Hello World!
Key storage Storage of keys in a persistent media (file, database) for later retrieval or transportation Objectives: The stored keys must be protected. Problems? If the key storage is compromised, the data protected by the keys become unprotected. Solutions? Use PBE to encrypt the keys.  Problems?
Key storage Key Wrapping The  wrap( )  method, defined in  javax.crypto.Cipher , takes a key as an argument and returns the encrypted value of the key as a byte array. Example: cipher .init (Cipher. WRAP_MODE , passwordKey, paramSpec); byte[ ] encryptedKeyBytes =  cipher .wrap (secretKey);   To decrypt the key: cipher .init (Cipher. UNWRAP_MODE , passwordKey, paramSpec); Key key =  cipher .unwrap(encryptedKeyBytes, “Blowfish”, Cipher.SECRET_KEY);
Key storage Key Encryption Use the  getEncoded( )  method, as defined in  java.security.Key , to encrypt the key. Example: byte[ ] keyBytes = myKey. getEncoded( ) ; cipher .init (Cipher. ENCRYPT_MODE , passwordKey, paramSpec); byte[ ] encryptedKeyBytes =  cipher .doFinal (keyBytes); To decrypt the key: cipher .init (Cipher. DECRYPT_MODE , passwordKey, paramSpec); byte[ ] keyBytes = cipher.doFinal (encryptedKeyBytes); SecretKeySpec  myKey = new SecretKeySpec (keyBytes, “Blowfish” );
Padding Padding  is needed to make the size of the plaintext to be a multiple of the block size. Most symmetric algorithms use one of two types of padding: No padding – requires the data end on a block exactly PKCS#5 padding – (PKCS = Public Key Cryptography Standard) Suppose there are N bytes in a block that need to be padded.  Fill each of the N bytes with the value N. If the data end on a multiple of the block size, add an entire block of padding. (See the illustration on p.81.)
Modes of DES ECB, CBC CFB (Cipher FeedBack) Similar to CBC, but may work on smaller chunks of data (8 bits for example). OFB (Output FeedBack) Similar to CFB, but provides better protection against data loss during transmission. That is, a single-bit error will not cause the whole block to be lost, as in the cases of ECB, CBC and CFB.
Cipher streams and IV Javax.crypto. CipherInputStream   javax.crypto. CipherOutputStream They provide convenient wrappers around standard input and output streams for them to be automatically encrypted or decrypted. Initialization Vector (IV):   A sequence of random bytes appended to the front of the plaintext before encryption by a block cipher.  Adding the initialization vector to the beginning of the plaintext eliminates the possibility of having the initial ciphertext block the same for any two messages. How to determine the size of a IV, given a cipher? Example: A 256-bit Rijndael cipher needs a 16-byte IV.
IV in Java public class  IvParameterSpec extends Object implements AlgorithmParameterSpec This class specifies an  initialization vector  (IV). Examples which use IVs are  ciphers in feedback mode , e.g., DES in CBC mode and RSA ciphers with OAEP encoding operation.  (NOTE: See page 434 for RSA-OAEP padding.)
Rijndael What is Rijndael ? (Dutch, pronounced as ‘Rain Doll’) “ Rijndael is a block cipher, designed by Joan Daemen and Vincent Rijmen as a candidate algorithm for the AES. The cipher has a variable block length and key length. We currently specified how to use keys with a length of 128, 192, or 256 bits to encrypt blocks with al length of 128, 192 or 256 bits.” (Source:  http://www. esat . kuleuven .ac.be/~ rijmen / rijndael / ) After nearly four years of evaluation, in October 2000, Rijndael was selected by the NIST as the `AES' (Advanced Encryption Standard).  See the  press release .
FileEncryptor.java FileEncryptor.java  (see  http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Four functions:  createKey ( password ) loadKey  ( password ) encrypt  ( password, inputFile, outputEncryptedFile ) decrypt  ( password, inputEncryptedFile, outputfile)
Sealed objects Sealed object: An object that is encrypted. The object must be serializable. Sealed objects can be useful for storing or transferring an encrypted version of an object. The default JDK 1.2 prevents extensions from using the class loader to create classes that are neither standard objects nor extensions.  That is, a  custom object  such as a  CreditCard  object, won’t be able to be decrypted. See Appendix D “the  EncryptedObject  class” for a better sealed object implementation.
Sealed objects SealedObjectExample .java   (see  http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample output: > java SealedObjectExample Creating a key. Encrypting the object. Unencrypting the object. Credit card number: 1234567890
Next Asymmetric Encryption (GS: 5) Relevant links: RFC 1829 - The ESP DES-CBC Transform   - This document describes the DES-CBC security transform for the IP Encapsulating Security Payload (ESP).  The GNU Crypto project   – This project   aims at providing free, versatile, high-quality, and provably correct implementations of cryptographic primitives and tools in the Java programming language for use by programmers and end-users. It’s also got a comprehensive listing of crypto-related algorithms.

More Related Content

What's hot (20)

PPTX
iOS Keychain 介紹
ShengWen Chiou
 
KEY
iPhone Development Intro
Luis Azevedo
 
PDF
Python twisted
Mahendra M
 
PDF
Book
luis_lmro
 
PDF
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
Christopher Frohoff
 
PPTX
Проведение криминалистической экспертизы и анализа руткит-программ на примере...
Alex Matrosov
 
PDF
Encryption Boot Camp at JavaZone 2010
Matthew McCullough
 
PDF
IronSmalltalk
ESUG
 
ODP
Joxean Koret - Database Security Paradise [Rooted CON 2011]
RootedCON
 
PDF
Rust: Systems Programming for Everyone
C4Media
 
PPTX
JavaOne 2016 - JVM assisted sensitive data
Charlie Gracie
 
KEY
Have Your Cake and Eat It Too: Meta-Programming Techniques for Java
Howard Lewis Ship
 
PDF
Advanced Encryption on the JVM v0.2.8
Matthew McCullough
 
ODP
Objects arent records with byte codes on the side
Michael Caruso
 
PDF
Testing NodeJS Security
Jose Manuel Ortega Candel
 
PDF
NSC #2 - D2 01 - Andrea Allievi - Windows 8.1 Patch Protections
NoSuchCon
 
PDF
Secure Storage: COMPOSABLE AND ROBUST OUTSOURCED STORAGE
Priyanka Aash
 
PDF
Fernando Arnaboldi - Exposing Hidden Exploitable Behaviors Using Extended Dif...
Codemotion
 
PDF
Cryptography in PHP: Some Use Cases
Zend by Rogue Wave Software
 
PDF
An introduction to Rust: the modern programming language to develop safe and ...
Claudio Capobianco
 
iOS Keychain 介紹
ShengWen Chiou
 
iPhone Development Intro
Luis Azevedo
 
Python twisted
Mahendra M
 
Book
luis_lmro
 
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
Christopher Frohoff
 
Проведение криминалистической экспертизы и анализа руткит-программ на примере...
Alex Matrosov
 
Encryption Boot Camp at JavaZone 2010
Matthew McCullough
 
IronSmalltalk
ESUG
 
Joxean Koret - Database Security Paradise [Rooted CON 2011]
RootedCON
 
Rust: Systems Programming for Everyone
C4Media
 
JavaOne 2016 - JVM assisted sensitive data
Charlie Gracie
 
Have Your Cake and Eat It Too: Meta-Programming Techniques for Java
Howard Lewis Ship
 
Advanced Encryption on the JVM v0.2.8
Matthew McCullough
 
Objects arent records with byte codes on the side
Michael Caruso
 
Testing NodeJS Security
Jose Manuel Ortega Candel
 
NSC #2 - D2 01 - Andrea Allievi - Windows 8.1 Patch Protections
NoSuchCon
 
Secure Storage: COMPOSABLE AND ROBUST OUTSOURCED STORAGE
Priyanka Aash
 
Fernando Arnaboldi - Exposing Hidden Exploitable Behaviors Using Extended Dif...
Codemotion
 
Cryptography in PHP: Some Use Cases
Zend by Rogue Wave Software
 
An introduction to Rust: the modern programming language to develop safe and ...
Claudio Capobianco
 

Viewers also liked (20)

PPT
Aplicaciones Móviles y Juegos para la Salud
Luis Fernandez Luque
 
DOCX
Planificaciones 3 y 4
Kristhell Miranda
 
PPTX
Cryptography - Simplified - Symmetric Encryption
Abdul Manaf Vellakodath
 
PPTX
Cryptography - Simplified - Asymmetric Encryption
Abdul Manaf Vellakodath
 
PPT
Blowfish Cryptosystem
هيثم فرج
 
PPT
Cryptography
Learn 2 Be
 
PPTX
Reading_Lesson 7 Explicit and Implicit Claims in a Text
Tine Lachica
 
PDF
Image encryption
rakshit2105
 
PDF
Advanced Encryption Standard (AES) Implementaion using Java
Sunil Kumar R
 
DOCX
El juego didáctico como herramienta para la enseñanza- aprendizaje
zugehis del carmen zuluaga pino
 
DOCX
Image encryption using aes key expansion
Sreeda Perikamana
 
PPTX
Image encryption using aes key expansion
Sreeda Perikamana
 
DOC
Sistema respiratorio secuencia didáctica (1)
Noemi Alvarez Aragon
 
PPTX
Artritis reumatoide (caso clinico)
Katito Molina
 
PPTX
Image Encryption in java ppt.
Pradeep Vishwakarma
 
DOC
Sistema Digestivo Humano
deibycortes
 
DOC
Examen de ciencias 1 primer bimestre biodiversidad
Seraf Calderon
 
PPTX
Image encryption and decryption
Aashish R
 
DOC
Taller - sistema digestivo humano
Miller Zamora
 
Aplicaciones Móviles y Juegos para la Salud
Luis Fernandez Luque
 
Planificaciones 3 y 4
Kristhell Miranda
 
Cryptography - Simplified - Symmetric Encryption
Abdul Manaf Vellakodath
 
Cryptography - Simplified - Asymmetric Encryption
Abdul Manaf Vellakodath
 
Blowfish Cryptosystem
هيثم فرج
 
Cryptography
Learn 2 Be
 
Reading_Lesson 7 Explicit and Implicit Claims in a Text
Tine Lachica
 
Image encryption
rakshit2105
 
Advanced Encryption Standard (AES) Implementaion using Java
Sunil Kumar R
 
El juego didáctico como herramienta para la enseñanza- aprendizaje
zugehis del carmen zuluaga pino
 
Image encryption using aes key expansion
Sreeda Perikamana
 
Image encryption using aes key expansion
Sreeda Perikamana
 
Sistema respiratorio secuencia didáctica (1)
Noemi Alvarez Aragon
 
Artritis reumatoide (caso clinico)
Katito Molina
 
Image Encryption in java ppt.
Pradeep Vishwakarma
 
Sistema Digestivo Humano
deibycortes
 
Examen de ciencias 1 primer bimestre biodiversidad
Seraf Calderon
 
Image encryption and decryption
Aashish R
 
Taller - sistema digestivo humano
Miller Zamora
 
Ad

Similar to Java Symmetric (20)

PPTX
Slide cipher based encryption
Mizi Mohamad
 
PPTX
Introduction to Cryptography.pptx
ssuser62852e
 
PDF
Jdbc 6
Tuan Ngo
 
DOCX
encryptFile- java import java-io-IOException- import java-nio-file-Fil.docx
akilaha
 
PPTX
Cryptography 101 for Java developers
Michel Schudel
 
DOCX
import java-io-IOException- import java-nio-file-Files- import java-ni.docx
hendriciraida
 
PPTX
Implement symmetric key algorithms.pptx
preethihp4500
 
PDF
Encryption Boot Camp at Øredev
Matthew McCullough
 
PPTX
How to do Cryptography right in Android Part One
Arash Ramez
 
PPT
12 symmetric key cryptography
drewz lin
 
PDF
82 86
Editor IJARCET
 
PDF
82 86
Editor IJARCET
 
PPT
Java Asymmetric
phanleson
 
PPTX
Cryptography 101 for Java developers
Michel Schudel
 
DOCX
Des1
svsugan
 
PDF
Cryptography for Smalltalkers
ESUG
 
KEY
Cryptography for developers
Kai Koenig
 
PPT
Cryptography for Smalltalkers - ESUG 2004
Martin Kobetic
 
PDF
Encryption Recap: A Refresher on Key Concepts
thomashtkim
 
PPTX
Cryptography
Sandip kumar
 
Slide cipher based encryption
Mizi Mohamad
 
Introduction to Cryptography.pptx
ssuser62852e
 
Jdbc 6
Tuan Ngo
 
encryptFile- java import java-io-IOException- import java-nio-file-Fil.docx
akilaha
 
Cryptography 101 for Java developers
Michel Schudel
 
import java-io-IOException- import java-nio-file-Files- import java-ni.docx
hendriciraida
 
Implement symmetric key algorithms.pptx
preethihp4500
 
Encryption Boot Camp at Øredev
Matthew McCullough
 
How to do Cryptography right in Android Part One
Arash Ramez
 
12 symmetric key cryptography
drewz lin
 
Java Asymmetric
phanleson
 
Cryptography 101 for Java developers
Michel Schudel
 
Des1
svsugan
 
Cryptography for Smalltalkers
ESUG
 
Cryptography for developers
Kai Koenig
 
Cryptography for Smalltalkers - ESUG 2004
Martin Kobetic
 
Encryption Recap: A Refresher on Key Concepts
thomashtkim
 
Cryptography
Sandip kumar
 
Ad

More from phanleson (20)

PDF
Learning spark ch01 - Introduction to Data Analysis with Spark
phanleson
 
PPT
Firewall - Network Defense in Depth Firewalls
phanleson
 
PPT
Mobile Security - Wireless hacking
phanleson
 
PPT
Authentication in wireless - Security in Wireless Protocols
phanleson
 
PPT
E-Commerce Security - Application attacks - Server Attacks
phanleson
 
PPT
Hacking web applications
phanleson
 
PPTX
HBase In Action - Chapter 04: HBase table design
phanleson
 
PPT
HBase In Action - Chapter 10 - Operations
phanleson
 
PPT
Hbase in action - Chapter 09: Deploying HBase
phanleson
 
PPTX
Learning spark ch11 - Machine Learning with MLlib
phanleson
 
PPTX
Learning spark ch10 - Spark Streaming
phanleson
 
PPTX
Learning spark ch09 - Spark SQL
phanleson
 
PPT
Learning spark ch07 - Running on a Cluster
phanleson
 
PPTX
Learning spark ch06 - Advanced Spark Programming
phanleson
 
PPTX
Learning spark ch05 - Loading and Saving Your Data
phanleson
 
PPTX
Learning spark ch04 - Working with Key/Value Pairs
phanleson
 
PPTX
Learning spark ch01 - Introduction to Data Analysis with Spark
phanleson
 
PPT
Hướng Dẫn Đăng Ký LibertaGia - A guide and introduciton about Libertagia
phanleson
 
PPT
Lecture 1 - Getting to know XML
phanleson
 
PPTX
Lecture 4 - Adding XTHML for the Web
phanleson
 
Learning spark ch01 - Introduction to Data Analysis with Spark
phanleson
 
Firewall - Network Defense in Depth Firewalls
phanleson
 
Mobile Security - Wireless hacking
phanleson
 
Authentication in wireless - Security in Wireless Protocols
phanleson
 
E-Commerce Security - Application attacks - Server Attacks
phanleson
 
Hacking web applications
phanleson
 
HBase In Action - Chapter 04: HBase table design
phanleson
 
HBase In Action - Chapter 10 - Operations
phanleson
 
Hbase in action - Chapter 09: Deploying HBase
phanleson
 
Learning spark ch11 - Machine Learning with MLlib
phanleson
 
Learning spark ch10 - Spark Streaming
phanleson
 
Learning spark ch09 - Spark SQL
phanleson
 
Learning spark ch07 - Running on a Cluster
phanleson
 
Learning spark ch06 - Advanced Spark Programming
phanleson
 
Learning spark ch05 - Loading and Saving Your Data
phanleson
 
Learning spark ch04 - Working with Key/Value Pairs
phanleson
 
Learning spark ch01 - Introduction to Data Analysis with Spark
phanleson
 
Hướng Dẫn Đăng Ký LibertaGia - A guide and introduciton about Libertagia
phanleson
 
Lecture 1 - Getting to know XML
phanleson
 
Lecture 4 - Adding XTHML for the Web
phanleson
 

Recently uploaded (20)

PDF
Advancing WebDriver BiDi support in WebKit
Igalia
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Advancing WebDriver BiDi support in WebKit
Igalia
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 

Java Symmetric

  • 1. GS: Chapter 4 Symmetric Encryption in Java
  • 2. Topics Blowfish Password-based encryption (PBE) Key storage Modes Cipher streams and IV (initialization vector) Sealed objects
  • 3. Applications of symmetric encryptions File encryption Network encryption Database encryption Applications that require encryption of large amount of data.
  • 4. Javax.crypto. KeyGenerator http://java.sun.com/j2se/1.4.1/docs/api/javax/crypto/KeyGenerator.html Provides the functionality of a (symmetric) key generator Key generators are constructed using one of the getInstance class methods. KeyGenerator objects are reusable, i.e., after a key has been generated, the same KeyGenerator object can be re-used to generate further keys. There are two ways to generate a key: in an algorithm-independent manner, and in an algorithm-specific manner. The only difference between the two is the initialization of the object.
  • 5. Javax.crypto. KeyGenerator Using KeyGenerator Create a new key generator: KeyGenerator keyGenerator = KeyGenerator.getInstance (“DESede”); Note: DESede is a triple DES variant with three DES keys k1, k2, k3. The message is encrypted with k1 first, then decrypted with k2, and finally encrypted again with k3. This increases the key space and prevents brute force attacks. Initialize the key generator with the size of the key: keyGenerator.init (168); // initialized to 168 bits Generate the key object: Key myKey = keyGenerator.generateKey ( );
  • 6. Java.security. Key http://java.sun.com/j2se/1.4.1/docs/api/java/security/Key.html java.security Interface Key All Superinterfaces: Serializable All Known Subinterfaces: DHPrivateKey , DHPublicKey , DSAPrivateKey , DSAPublicKey , PBEKey , PrivateKey , PublicKey , RSAMultiPrimePrivateCrtKey , RSAPrivateCrtKey , RSAPrivateKey , RSAPublicKey , SecretKey All Known Implementing Classes: KerberosKey , SecretKeySpec
  • 7. Java.security. Key The Key interface is the top-level interface for all keys. It defines the functionality shared by all key objects. All keys have three characteristics: The key algorithm for that key; An external encoded form for the key used when a standard representation of the key is needed outside the Java Virtual Machine, as when transmitting the key to some other party; The name of the format of the encoded key Keys are generally obtained through key generators, key factory, certificates, or various Identity classes used to manage keys. Examples: javax.crypto.KeyGenerator( ) ; java.security.KeyFactory( ) ;
  • 8. Javax.crypto. Cipher http://java.sun.com/j2se/1.4.1/docs/api/ public class Cipher extends Object This class provides the functionality of a cryptographic cipher for encryption and decryption. It forms the core of the Java Cryptographic Extension (JCE) framework. To use a Cipher: getInstance( ), init( ), update( ), doFinal( ).
  • 9. Javax.crypto. Cipher. getInstance( ) In order to create a Cipher object, the application calls the Cipher's getInstance method, and passes the name of the requested transformation to it. static  Cipher getInstance ( String  transformation) Generates a Cipher object that implements the specified transformation. static  Cipher getInstance ( String  transformation, Provider  provider) Creates a Cipher object that implements the specified transformation, as supplied by the specified provider. static  Cipher getInstance ( String  transformation, String  provider) Creates a Cipher object that implements the specified transformation, as supplied by the specified provider.
  • 10. Javax.crypto. Cipher. getInstance( ) Examples: Cipher cipher = Cipher.getInstance(" DES/CBC/PKCS5Padding "); Cipher cipher = Cipher.getInstance(“DESede/ECB/PKCS5Padding”);
  • 11. Javax.crypto. Cipher. init( ) Initialize an instance of Cipher: Declares the operating mode (ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE, UNWRAP_MODE) Pass a key (java.security.Key) to the cipher Example: Cipher.init (Cipher.ENCRYPT_MODE, myKey); Note: When a Cipher object is initialized, it loses all previously-acquired state. In other words, initializing a Cipher is equivalent to creating a new instance of that Cipher and initializing it.
  • 12. Javax.crypto. Cipher. update( ) Pass the information to be encrypted/decrypted to the cipher: The information must be in the form of a byte array. Note: Ciphers typically buffer their output. If the buffer has not been filled, null will be returned. Alternative update( ) methods: byte[ ] update (byte[] input) byte[ ] plaintext = myString.getBytes (“UTF8”); byte[ ] ciphertext = cipher.update (plaintext); int update (byte[ ] input, int inputOffset, int inputLen, byte[ ] output, int outputOffset) Continues a multiple-part encryption or decryption operation (depending on how this cipher was initialized), processing another data part.
  • 13. Javax.crypto. Cipher. doFinal( ) Finish the operation:   byte[ ] doFinal ( ) Finishes a multiple-part encryption or decryption operation, depending on how this cipher was initialized.   byte[ ] doFinal (byte[] input) Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation. Example: Byte[ ] ciphertext = cipher.doFinal ( );
  • 14. SimpleExample.java P.69: SimpleExample.java (see http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample output: > java SimpleExample "How are you doing?" Plain Message=How are you doing? Generating a TripleDES key... Done generating the key. Now encrypting the message Message Encrypted Ciphertext=-74-45759-44-115-19-8-56-99-47794393-45-107-41-125-127-233271855 Now decrypting the message Message decrypted Decrypted text: How are you doing?
  • 15. BlowfishExample.java Blowfish keys can be any bit size from 8 to 448, as long as the number if divisible by 8. p.69: BlowfishExample.java (see http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample output: > java BlowfishExample "It's a wonderful day!" Generating a Blowfish key... Done generating the key. Plaintext: 73 116 39 115 32 97 32 119 111 110 100 101 114 102 117 108 32 100 97 121 33 Ciphertext: -77 56 -88 61 -52 -12 -57 43 -10 66 -54 -98 -86 56 -86 51 -127 -125 30 48 -64 11 2 -37 -125 Decrypted text: It's a wonderful day!
  • 16. Password-based encryption (PBE) hashing + symmetric encryption The user-provided password is hashed by a message digest algorithm , such as SHA. The hash value is then used to construct a key for a symmetric encryption algorithm , such as Blowfish. The plaintext is then encrypted by the symmetric encryption algorithm. Problems? PBE is usually less secure, due to its smaller key space. Passwords may suffer ‘dictionary attack’. Two people might choose the same password, which would create two identical entries in the password file.
  • 17. Password-based encryption (PBE) PBE + salt + iteration count A salt is a randomly generated piece of data, say 64 bits, that is added to each password. The combined salt+password is used to generate the key. The key is then used to generate a symmetric cipher. For the purpose of decryption, the salt must be stored as part of the ciphertext. See figures on page 74.
  • 19. Base64 Encoding Effective in representing ASCII data as 6-bit characters (save one bit per character) Widely used in networking transmissions of data; e.g., in MIME emails & other Internet-related applications Input: N bytes Number of output characters (N * 8 / 24) * 4, if N*8 % 24 is zero; (N * 8 / 24 + 1) * 4, otherwise. Example: N = 8 bytes. (64 / 24 + 1) * 4  12 characters See http://nas.cl.uh.edu/yang/teaching/csci5939DatabaseSecurity/base64.ppt , RFC2045, and Appendix C.
  • 21. Password-based encryption (PBE) Random.nextBytes (byte[ ] bytes) Generates random bytes and places them into a user-supplied byte array. public class PBEKeySpec extends Object implements KeySpec A user-chosen password that can be used with password-based encryption (PBE). The password can be viewed as some kind of raw key material, from which the encryption mechanism that uses it derives a cryptographic key.
  • 22. Password-based encryption (PBE) public class SecretKeyFactory extends Object This class represents a factory for secret keys. Key factories are used to convert keys (opaque cryptographic keys of type Key ) into key specifications (transparent representations of the underlying key material), and vice versa. Secret key factories operate only on secret (symmetric) keys. Key factories are bi-directional, i.e., they allow to build an opaque key object from a given key specification (key material), or to retrieve the underlying key material of a key object in a suitable format. Application developers should refer to their provider's documentation to find out which key specifications are supported by the generateSecret and getKeySpec methods.
  • 23. Password-based encryption Twofish encryption algorithm: A symmetric block cipher that accepts keys of any length, up to 256 bits; Among the new encryption algorithms being considered by the National Institute of Science and Technology (NIST) as a replacement for the DES algorithm; Highly secure and flexible; Works extremely well with large microprocessors, 8-bit smart card microprocessors, and dedicated hardware. (Source: http://www. wiley .com/ cda /product/0,,0471353817,00.html )
  • 24. Password-based encryption An example program: PBE.java (see http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample PBE encryption/decryption: > java PBE -e sasquatch "Hello World!" yrVhjq5djco=eSIS1LbeAtu5KIKf5ntNhg== > java PBE -e sasquatch "Hello World!" lQ1lzMl8ONM=GBJFXSnpbltXowvJTmck1w== > java PBE -d sasquatch "lQ1lzMl8ONM=GBJFXSnpbltXowvJTmck1w==" Hello World!
  • 25. Key storage Storage of keys in a persistent media (file, database) for later retrieval or transportation Objectives: The stored keys must be protected. Problems? If the key storage is compromised, the data protected by the keys become unprotected. Solutions? Use PBE to encrypt the keys. Problems?
  • 26. Key storage Key Wrapping The wrap( ) method, defined in javax.crypto.Cipher , takes a key as an argument and returns the encrypted value of the key as a byte array. Example: cipher .init (Cipher. WRAP_MODE , passwordKey, paramSpec); byte[ ] encryptedKeyBytes = cipher .wrap (secretKey); To decrypt the key: cipher .init (Cipher. UNWRAP_MODE , passwordKey, paramSpec); Key key = cipher .unwrap(encryptedKeyBytes, “Blowfish”, Cipher.SECRET_KEY);
  • 27. Key storage Key Encryption Use the getEncoded( ) method, as defined in java.security.Key , to encrypt the key. Example: byte[ ] keyBytes = myKey. getEncoded( ) ; cipher .init (Cipher. ENCRYPT_MODE , passwordKey, paramSpec); byte[ ] encryptedKeyBytes = cipher .doFinal (keyBytes); To decrypt the key: cipher .init (Cipher. DECRYPT_MODE , passwordKey, paramSpec); byte[ ] keyBytes = cipher.doFinal (encryptedKeyBytes); SecretKeySpec myKey = new SecretKeySpec (keyBytes, “Blowfish” );
  • 28. Padding Padding is needed to make the size of the plaintext to be a multiple of the block size. Most symmetric algorithms use one of two types of padding: No padding – requires the data end on a block exactly PKCS#5 padding – (PKCS = Public Key Cryptography Standard) Suppose there are N bytes in a block that need to be padded. Fill each of the N bytes with the value N. If the data end on a multiple of the block size, add an entire block of padding. (See the illustration on p.81.)
  • 29. Modes of DES ECB, CBC CFB (Cipher FeedBack) Similar to CBC, but may work on smaller chunks of data (8 bits for example). OFB (Output FeedBack) Similar to CFB, but provides better protection against data loss during transmission. That is, a single-bit error will not cause the whole block to be lost, as in the cases of ECB, CBC and CFB.
  • 30. Cipher streams and IV Javax.crypto. CipherInputStream javax.crypto. CipherOutputStream They provide convenient wrappers around standard input and output streams for them to be automatically encrypted or decrypted. Initialization Vector (IV): A sequence of random bytes appended to the front of the plaintext before encryption by a block cipher. Adding the initialization vector to the beginning of the plaintext eliminates the possibility of having the initial ciphertext block the same for any two messages. How to determine the size of a IV, given a cipher? Example: A 256-bit Rijndael cipher needs a 16-byte IV.
  • 31. IV in Java public class IvParameterSpec extends Object implements AlgorithmParameterSpec This class specifies an initialization vector (IV). Examples which use IVs are ciphers in feedback mode , e.g., DES in CBC mode and RSA ciphers with OAEP encoding operation. (NOTE: See page 434 for RSA-OAEP padding.)
  • 32. Rijndael What is Rijndael ? (Dutch, pronounced as ‘Rain Doll’) “ Rijndael is a block cipher, designed by Joan Daemen and Vincent Rijmen as a candidate algorithm for the AES. The cipher has a variable block length and key length. We currently specified how to use keys with a length of 128, 192, or 256 bits to encrypt blocks with al length of 128, 192 or 256 bits.” (Source: http://www. esat . kuleuven .ac.be/~ rijmen / rijndael / ) After nearly four years of evaluation, in October 2000, Rijndael was selected by the NIST as the `AES' (Advanced Encryption Standard). See the press release .
  • 33. FileEncryptor.java FileEncryptor.java (see http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Four functions: createKey ( password ) loadKey ( password ) encrypt ( password, inputFile, outputEncryptedFile ) decrypt ( password, inputEncryptedFile, outputfile)
  • 34. Sealed objects Sealed object: An object that is encrypted. The object must be serializable. Sealed objects can be useful for storing or transferring an encrypted version of an object. The default JDK 1.2 prevents extensions from using the class loader to create classes that are neither standard objects nor extensions. That is, a custom object such as a CreditCard object, won’t be able to be decrypted. See Appendix D “the EncryptedObject class” for a better sealed object implementation.
  • 35. Sealed objects SealedObjectExample .java (see http://sce.cl.uh.edu/yang/teaching/ proJavaSecurityCode .html ) Sample output: > java SealedObjectExample Creating a key. Encrypting the object. Unencrypting the object. Credit card number: 1234567890
  • 36. Next Asymmetric Encryption (GS: 5) Relevant links: RFC 1829 - The ESP DES-CBC Transform - This document describes the DES-CBC security transform for the IP Encapsulating Security Payload (ESP). The GNU Crypto project – This project aims at providing free, versatile, high-quality, and provably correct implementations of cryptographic primitives and tools in the Java programming language for use by programmers and end-users. It’s also got a comprehensive listing of crypto-related algorithms.