Advertisement

Cryptography With PHP

Senior Software Engineer PHP at Nucleus Security
Jul. 12, 2016
Advertisement

More Related Content

Advertisement
Advertisement

Cryptography With PHP

  1. CRYPTOGRAPHY WITH PHP MARK NIEBERGALL https://joind.in/talk/53c3d
  2. CRYPTOGRAPHY WITH PHP ABOUT MARK NIEBERGALL ▸ PHP since 2005 ▸ Masters degree in MIS ▸ Senior Software Engineer ▸ Team Lead ▸ Drug screening project ▸ President of Utah PHP User Group (UPHPU) ▸ SSCP, CSSLP Certified and SME for (ISC)2 ▸ PHP, databases, JavaScript ▸ Drones, fishing, skiing, father, husband
  3. CRYPTOGRAPHY WITH PHP ABOUT MARK NIEBERGALL
  4. CRYPTOGRAPHY WITH PHP UPHPU ▸ Third Thursday of each month at 7pm ▸ Venue is Vivint in Lehi (3401 Ashton Blvd) ▸ Variety of PHP related topics ▸ Mostly local speakers, occasional traveling speaker ▸ Networking with other developers, companies ▸ Professional development ▸ uphpu.org
  5. CRYPTOGRAPHY WITH PHP OVERVIEW ▸ Why Cryptography ▸ Definitions ▸ Role of Cryptography ▸ Algorithms ▸ Encryption with PHP ▸ Considerations
  6. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY
  7. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY ▸ Over 100,000 security incidents in 2015 ▸ Attacks largely for financial gain ▸ Many going after sensitive data
  8. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY ▸ Review Verizon 2016 Data Breach Investigations Report ▸ Yearly report ▸ Cybersecurity investigations report ▸ Pulls from many sources ▸ Lots of informative charts
  9. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY Countries represented in report
  10. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY Incidents by industry
  11. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY Incidents with data loss
  12. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY
  13. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY
  14. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY
  15. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY
  16. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY ▸ No organization is immune ▸ Cryptography significantly reduces breach cost ▸ Cryptography can prevent leak of actual sensitive data
  17. CRYPTOGRAPHY WITH PHP WHY CRYPTOGRAPHY ▸ Attack Countermeasures ▸ Good password policy ▸ Encrypt sensitive data ▸ Encrypt computer disks and devices
  18. CRYPTOGRAPHY WITH PHP DEFINITIONS
  19. CRYPTOGRAPHY WITH PHP DEFINITIONS ▸ Cryptography ▸ The process of writing or reading secret messages or codes ▸ Classical cryptography started thousands of years ago ▸ Advanced during wars of 20th century ▸ The science or study of secret communications
  20. CRYPTOGRAPHY WITH PHP DEFINITIONS ▸ Encryption ▸ To change information from one form to another especially to hide its meaning ▸ En: to make ▸ Crypto: secret or hidden ▸ The actual changing of a communication
  21. CRYPTOGRAPHY WITH PHP DEFINITIONS ▸ Algorithm ▸ A set of steps that are followed in order to solve a mathematical problem or to complete a computer process
  22. CRYPTOGRAPHY WITH PHP DEFINITIONS ▸ Cipher ▸ A way of changing a message to keep it secret ▸ An algorithm used to encrypt or decrypt ▸ Classically included substitution and transposition
  23. CRYPTOGRAPHY WITH PHP DEFINITIONS ▸ Hash ▸ To chop into small pieces ▸ Maps data to a string ▸ One-way hash functions ▸ Schneier “workhorses of modern cryptography” ▸ Input is the message, output is the digest
  24. CRYPTOGRAPHY WITH PHP ROLE OF CRYPTOGRAPHY
  25. CRYPTOGRAPHY WITH PHP ROLE OF CRYPTOGRAPHY ▸ World War II ▸ Enigma Machine used by Nazi Germany ▸ Code breaking by Allies, including Alan Turing
  26. CRYPTOGRAPHY WITH PHP ROLE OF CRYPTOGRAPHY ▸ Secure communications from third parties ▸ Confidentiality of communications
  27. CRYPTOGRAPHY WITH PHP ROLE OF CRYPTOGRAPHY ▸ Secure data at rest ▸ Secure data in transit
  28. CRYPTOGRAPHY WITH PHP ROLE OF CRYPTOGRAPHY ▸ First 2 A’s in the AAA Framework ▸ Authentication: credentials ▸ Authorization: encrypt and decrypt data ▸ Accounting
  29. CRYPTOGRAPHY WITH PHP ALGORITHMS
  30. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ One Way Hash
  31. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ One Way Hash ▸ Data is hashed ▸ Cannot go backwards ▸ Integrity checks ▸ Password checks ▸ Identifiers; ex: Git and Mercurial
  32. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ One Way Hash ▸ MD5 ▸ SHA-1, SHA-2, SHA-3
  33. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Symmetric-Key
  34. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Symmetric-Key ▸ Same key to encrypt and decrypt ▸ Shared secret key ▸ Stream 1 character at a time ▸ Blocks of X bits ▸ Susceptible to plaintext attacks (known and chosen) and cryptanalysis (differential and linear)
  35. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Symmetric-Key ▸ DES ▸ Triple DES ▸ AES
  36. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Symmetric-Key ▸ Blowfish ▸ Twofish ▸ Threefish
  37. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Asymmetric-Key
  38. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Asymmetric-Key ▸ Heavily used in cryptography ▸ Public and private keys ▸ Public key is publicly available ▸ Private key is kept secret
  39. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Asymmetric-Key
  40. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Asymmetric-Key ▸ Public key used to authenticate messages from owner of the private key ▸ Public key used to encrypt message to send to owner of the private key ▸ Private key used to decrypt inbound messages ▸ Private key used to encrypt outbound messages
  41. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Asymmetric-Key (Public-Key) ▸ RSA ▸ DSA
  42. CRYPTOGRAPHY WITH PHP ALGORITHMS ▸ Broken ▸ DES ▸ MD2, MD4, MD5 ▸ SHA-1 ▸ GOST ▸ Panama ▸ RC4
  43. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  44. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ Hash ▸ Password hashing ▸ mcrypt ▸ openssl ▸ cracklib ▸ CSPRNG
  45. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ Hash ▸ hash($algorithm, $message, $raw = false); ▸ hash_algos for array of options ▸ hash_file for file contents hash ▸ hash_update for larger data sets
  46. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  47. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  48. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  49. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ Password hashing
  50. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ Password hashing ▸ $insecure = md5($password); ▸ Too fast ▸ Brute force ▸ 5f4dcc3b5aa765d61d8327deb882cf99
  51. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ Password hashing ▸ Use password_hash and password_verfiy ▸ $current = password_hash($password, PASSWORD_DEFAULT); ▸ PASSWORD_DEFAULT can change over time, currently is blowfish, max password length of 72 ▸ $verify = password_verify($password, $current);
  52. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ Password hashing ▸ Salt generated automatically ▸ Deprecated as option in PHP 7 ▸ Option ‘cost’ ▸ password_hash($password, PASSWORD_DEFAULT, [‘cost’ => 10]);
  53. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  54. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  55. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  56. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ mcrypt
  57. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ mcrypt ▸ Generally use openssl instead ▸ Supports many ciphers ▸ Encrypt and decrypt ▸ Uses libmcrypt, which hasn’t been updated since 2007 ▸ Bug fixes and patches
  58. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ mcrypt ▸ $digest = hash($algorithm, $data, $raw = false); ▸ Ex: hash(‘sha256’, ‘Some data!’, true); ▸ mcrypt_encrypt($cipher, $key, $data, $mode, $iv = null); ▸ Ex: mcrypt_encrypt(MCRYPT_TRIPLEDES,
  59. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ mcrypt ▸ mcrypt_generic ▸ mcrypt_decrypt ▸ mcrypt_create_iv ▸ Initialization vector ▸ Alternative seed to encryption routines
  60. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl
  61. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl ▸ Generate and verify signatures ▸ Certificate Signing Requests (CSR) ▸ Encrypt and decrypt data ▸ Actively supported
  62. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl ▸ Private key generation ▸ openssl_pkey_new([$configs]); ▸ openssl_pkey_export_to_file($privateKey, $fileName); ▸ openssl_free_key($privateKey);
  63. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl ▸ Configuration defaults to openssl.conf ▸ digest_alg: Digest method to use ▸ x509_extensions: Extensions to use for x509 cert ▸ req_extensions: Extensions to use for CSR ▸ private_key_bits: Bits for private key generation ▸ private_key_type: Type of key ▸ encrypt_key: Export key with passphrase ▸ encrypt_key_cipher: Cipher for key
  64. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  65. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  66. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl ▸ Public key generation ▸ openssl_pkey_get_details($privateKey) ▸ Array with keys bits, key (public key), rsa, type
  67. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  68. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  69. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl ▸ Encrypting data ▸ Encrypt in chunks smaller than key bit size ▸ openssl_public_encrypt
  70. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  71. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl ▸ Decrypting data ▸ openssl_pkey_get_private($privateKey) ▸ openssl_private_decrypt($chunk, $decrypted, $privateKey)
  72. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  73. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ openssl ▸ openssl_encrypt($data, $cipher, $password, $options, $iv) ▸ openssl_encrypt(‘Password123!@#’, ‘AES256’, $publicKeyString, 0, $largeRandomNumber)
  74. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  75. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ cracklib
  76. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ cracklib ▸ PECL extension, must be installed ▸ Checks complexity of passwords ▸ Still experimental
  77. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ cracklib ▸ crack_opendict(‘/ptah/to/dictionary’) ▸ crack_check($dictionary, $password) ▸ crack_getlastmessage() ▸ crack_closedict($dictionary)
  78. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ cracklib ▸ it's WAY too short ▸ it is too short ▸ it does not contain enough DIFFERENT characters ▸ it is all whitespace ▸ it is too simplistic/systematic ▸ it looks like a National Insurance number. ▸ it is based on a dictionary word ▸ it is based on a (reversed) dictionary word ▸ strong password
  79. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ CSPRNG
  80. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ CSPRNG ▸ Part of PHP 7 core ▸ Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
  81. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP ▸ CSPRNG ▸ random_bytes($length) ▸ random_int($min, $max)
  82. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  83. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  84. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  85. CRYPTOGRAPHY WITH PHP ENCRYPTION WITH PHP
  86. CRYPTOGRAPHY WITH PHP CONSIDERATIONS
  87. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Salts ▸ Algorithm costs ▸ Timing attacks ▸ Brute force attacks ▸ Rainbow tables ▸ Max message length
  88. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Salts ▸ Increased security for digest if done correctly ▸ Ex: $salt . $password ▸ Pepper debate ▸ Let password_hash generate the salt for you ▸ Different salt per password or message
  89. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Algorithm Costs ▸ Default cost for password_hash is 10 ▸ Higher cost leads to more processing time ▸ 8-12 is generally a good baseline ▸ Might change depending on hardware available
  90. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Timing Attacks ▸ Analyzing timing for algorithms ▸ Time variation for hashing, encrypting, decrypting ▸ Ex: Username not found, no password check attempted ▸ Ex: String comparisons stop after first mismatch ▸ Timing safety built into functions, take same time for positive or negative match
  91. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Brute Force Attacks ▸ Timing attack used to brute force list of usernames ▸ Dictionary attack using dictionary and common passwords ▸ Take time ▸ Advanced Persistent Threat (APT)
  92. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Brute Force Attacks ▸ Countermeasures ▸ Lock accounts, but causes Denial of Service ▸ Add time to each login ▸ Lock by IP address ▸ Vary failed login attempt behavior (Ex: HTTP status, redirect)
  93. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Brute Force Attacks ▸ Countermeasures ▸ Key words in HTML comments (invalid login, bad username or password) ▸ Security questions ▸ CAPTCHA ▸ Add another factor (multi-factor authentication)
  94. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Rainbow Tables ▸ Table with hashes already figured out ▸ Used for hashing that always generates same hash for an input ▸ Counter with modern algorithms, salts ▸ Common for MD5, SHA1, LM
  95. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Rainbow Tables ▸ Internet search for the hash ▸ Online hash cracking sites
  96. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Max Message Length ▸ Only X characters considered when generating hash ▸ Ex: MD5 max is 128 characters in, 32 hex out
  97. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Identify sensitive data ▸ Determine appropriate encryption ▸ Use cryptography to keep data safe
  98. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Cryptography can help minimize damage ▸ Electronic data breaches ▸ Stolen electronic devices ▸ Data transmission
  99. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Cryptography cannot help minimize damage ▸ Phishing attacks ▸ Credential theft ▸ Escalation of privileges ▸ DoS/DDoS ▸ Social engineering
  100. CRYPTOGRAPHY WITH PHP CONSIDERATIONS ▸ Security education ▸ Verizon Data Breach Investigation Report ▸ SANS Institution, email digest ▸ Krebs on Security blog ▸ OWASP ▸ BrightTALK
  101. CRYPTOGRAPHY WITH PHP QUESTIONS? ▸ https://joind.in/talk/53c3d
  102. CRYPTOGRAPHY WITH PHP SOURCES ▸ Merriam-Webster Dictionary online ▸ PHP.net documentation ▸ Virendra Chandak https://www.virendrachandak.com ▸ OWASP ▸ Verizon 2016 Data Breach Investigations Report
Advertisement