Cryptography

57
獊ॠӥካՈ᮷䨝ᇨጱ梊物 嘨䋊 yllan, 2015

Transcript of Cryptography

Page 1: Cryptography

yllan, 2015

Page 2: Cryptography

• @yllan

• hypo https://hypo.cc/

• SOLDA https://solda.io/

Page 3: Cryptography
Page 4: Cryptography
Page 5: Cryptography

Q: AES

Page 6: Cryptography
Page 7: Cryptography
Page 8: Cryptography

• /

• key

• key

Page 9: Cryptography

Encryption

Page 10: Cryptography

Encryption System• Block Cipher

• DES, AES, RSA, …

• block padding block

• Block Mode: ECB / CBC / GCM / ……

Page 11: Cryptography

Don’t Use ECB mode!Block 1 Block 2 Block N…

Cipher 1 Cipher 2 Cipher N…

Page 12: Cryptography

ECB: Cut & Paste

Cookie: auth=AES-ECB(username)

Cookie: auth=AES-ECB(1234567890123456admin)

Page 13: Cryptography

ECB: Byte-by-Byte• Oracle(m)=AES-ECB(m‖secret, key)

AES-ECB(123456789012345secret, key) AES-ECB(123456789012345*secret, key) AES-ECB(123456789012345ssecret, key) AES-ECB(12345678901234secret, key) AES-ECB(12345678901234s*secret, key) AES-ECB(12345678901234sesecret, key) AES-ECB(1234567890123secret, key)

A block: 16-bytes

Page 14: Cryptography

CBC

Page 15: Cryptography

comment=hello ,%20MOPCON. %26admin=true&admin=true

Page 16: Cryptography

comment=hello ,%20MOPCON. %26admin=true&admin=true

comment=hello ?SDA(*H@*(#$& %2&admin=true

&⊕6

Page 17: Cryptography

CBC Padding Oracle• PKCS7 Padding

• xxxxxxxxxx\01

• xxxxxxxxx\02\02

• xxxxxxxx\03\03\03

Page 18: Cryptography

if (!bytes.takeRight(bytes.last)

.forAll(_ == bytes.last))

{

throw Exception(“Padding invalid!”)

}

Page 19: Cryptography
Page 20: Cryptography

030303

Page 21: Cryptography

030303

⊕01

Page 22: Cryptography

030302

⊕01

Page 23: Cryptography

030302

⊕01

Page 24: Cryptography

030303

⊕02

Page 25: Cryptography

030301

⊕02

valid padding!

Page 26: Cryptography

030301

⊕02

valid padding!last byte ⊕ 02 = 01, last byte = 03

Page 27: Cryptography

030303

valid padding!last byte ⊕ 02 = 01, last byte = 03

Page 28: Cryptography

??040404

⊕??070707

Page 29: Cryptography

Authentication(Signing)

Page 30: Cryptography

(Crypto) Hash• MD5, SHA1, SHA2, SHA3……

• input n output

• One-Way: H(x) x

• 2nd Pre-Image Resistance: y H(x) = H(y)

• Collision Free: x ≠ y ⇒ H(x) = H(y)

Page 31: Cryptography

Hash ≠ Authentication

Page 32: Cryptography

• user=yllan&rating=5&album=12345

• MD5(secretalbum12345rating5useryllan)

• Length Extension Attack

Page 33: Cryptography

Length Extension Attack• ????user=yllan&rating=5

• ????user=yllan&rating=5…&admin=true

Page 34: Cryptography

data data paddata

1 length0…0

64bytes 64bytes 64bytes

Page 35: Cryptography

data paddatadata

64bytes 64bytes 64bytes

v1: 0x67452301

v2: 0xEFCDAB89

v3: 0x98BADCFE

v4: 0x10325476

v5: 0xC3D2E1F0

Page 36: Cryptography

data paddatadata

64bytes 64bytes 64bytes

v1: 0xAAAAAAAA

v2: 0xBBBBBBBB

v3: 0xCCCCCCCC

v4: 0xDDDDDDDD

v5: 0xEEEEEEEE

Page 37: Cryptography

data paddatadata

64bytes 64bytes 64bytes

v1: 0xFFFFFFFF

v2: 0xFFFFFFFF

v3: 0xFFFFFFFF

v4: 0xFFFFFFFF

v5: 0xFFFFFFFF

Page 38: Cryptography

data paddatadata

64bytes 64bytes 64bytes

v1: 0x00000000

v2: 0x11111111

v3: 0x22222222

v4: 0x33333333

v5: 0x44444444

SHA1: 0x0000000011111111222222223333333344444444

Page 39: Cryptography

? ???

64bytes 64bytes 64bytes

SHA1: 0x0000000011111111222222223333333344444444

Page 40: Cryptography

? ???

64bytes 64bytes 64bytes

SHA1: 0x0000000011111111222222223333333344444444

v1: 0x00000000

v2: 0x11111111

v3: 0x22222222

v4: 0x33333333

v5: 0x44444444

Page 41: Cryptography

? ???

64bytes 64bytes 64bytes

v1: 0x00000000

v2: 0x11111111

v3: 0x22222222

v4: 0x33333333

v5: 0x44444444

PadExtension

Page 42: Cryptography

? ???

64bytes 64bytes 64bytes

v1: 0x55555555

v2: 0x66666666

v3: 0x77777777

v4: 0x88888888

v5: 0x99999999

SHA1: 0x5555555566666666777777778888888899999999

PadExtension

Page 43: Cryptography

? ???

64bytes 64bytes 64bytes

v1: 0x55555555

v2: 0x66666666

v3: 0x77777777

v4: 0x88888888

v5: 0x99999999

SHA1: 0x5555555566666666777777778888888899999999

PadExtension

Page 44: Cryptography

MAC

• Message Authentication Code

• HMAC-SHA256(message, secret)

• m, MACk(m) ⇒ n, MACk(n)

Page 45: Cryptography

Side Channel Attack

Page 46: Cryptography

Comparisonpublic static boolean isEqual(byte digesta[], byte digestb[]) { if (digesta.length != digestb.length) return false;

for (int i = 0; i < digesta.length; i++) { if (digesta[i] != digestb[i]) { return false; } } return true; }

Java 6u15: MessageDigest.isEqual

Page 47: Cryptography

Constant Time Comparison ( )

public static boolean isEqual(byte[] a, byte[] b) { if (a.length != b.length) { return false; }

int result = 0; for (int i = 0; i < a.length; i++) { result |= a[i] ^ b[i]; } return result == 0; }

Page 48: Cryptography

Side Channel

• HEARTBLEED

Page 49: Cryptography
Page 50: Cryptography
Page 51: Cryptography
Page 52: Cryptography

• bcrypt()

Page 53: Cryptography

• RSA/DES library… Orz

Page 54: Cryptography
Page 55: Cryptography
Page 56: Cryptography

Q & A

Page 57: Cryptography

1 2 3 4 5 6 78 9 10……