Lect 09
Lect 09
Security
Demo from RSA Security (www.rsa.com)
Sildes taken from Tammy Bailey
Slides taken from Kevin Wayne & Robert Sedgewick at
Princeton University
For further reference “Applied Cryptography” by Bruce
Schneier
Upcoming
Complexity
Reading
Sections 4.6 and 11 in Brookshear.
Chapters 11,13 in Great Ideas.
Encryption
Decryption
• decryption algorithm
• decryption key
IDEA DSA
easy
8876044532898802067 = 1500450271 × 5915587277
hard
Timing attacks.
Reconstruct d by sending C and monitoring how long it takes to
compute Cd(mod n).
Other means?
Long-standing open research question.
Third party.
Bob verifies Alice’s signature on digitally signed message
(e.g. electronic check).
Bob forwards digitally signed message to bank.
Bank re-verifies Alice’s signature.
Public-key cryptosystem
separate keys for encryption
and decryption
system with 1000 users
requires 2000 keys
each individual user has
exactly two keys
Bruce Schneier,
CPS 001 Counterpane Internet Security, Inc.9.35
Detection
Determine that either an attack is underway or has occurred
and report it
Real-time monitoring
or, as close as possible
monitor attacks to provide data about their nature,
severity, and results
Intrusion verification and notification
intrusion detection systems (IDS)
typical detection systems monitor various aspects of the
system, looking for actions or information indicating an
attack
• example: denial of access to a system when user repeatedly
enters incorrect password
Computation:
select two prime integers p, q
compute integers n = p × q
v = (p-1) × (q-1)
select small odd integer k such that gcd(k, v) = 1
compute integer d such that (d × k)%v = 1
Output: n, k, and d
Computation:
let C be integer representation of ciphertext
C = (Mk)%n
Output: integer C
ciphertext or encrypted message
Computation:
let D be integer representation of decrypted ciphertext
D = (Cd)%n
Output: integer D
decrypted message
Predefined constants
BigInteger.ZERO
BigInteger.ONE
Examples:
BigInteger w = p.add(q);
BigInteger x = p.subtract(q);
BigInteger y = p.multiply(q);
BigInteger z = p.divide(q);
BigInteger z = x.modInverse(y);