Crypto Cheat Sheet

Crypto Cheat Sheet

Online Tools - Classic Crypto

| Complex| Substitution Cipher| Vigenère Cipher| | - | - | - | | CyberChef | Substitution Cipher Solver Tool | Known Key </br>Python - pycipher library</br>online - Vigenère cipher</br>CAP4| | quipqiup|| Unknown Key</br>Vigenère Cipher Codebreaker</br>Vigenere Solver |

RSA相關攻擊

其實整裡的文章內容都差不多

Coding Tools

  • 大數運算: gmpy2/sage math online - cocalc/sage math online - sagecell/WolframAlpha:這是一個線上的搜索引擎,但凡和數學相關的都能進行運算,使用解說可以看這裡
      $ sudo apt install sagemath
      # or
      $ conda create --name sageenv sage=10.0 -c conda-forge -y # just only for wsl
      ---
      # 想要在sage中安裝python library
      $ sage -pip install {library name}
    

    :::spoiler To address Discrete Log Problem

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      p = 117635180960139721127318189832610714114593440637486157582828661167364276581210599344857316369131977790468647533227778603367761815400416396281259234299247850289710613080530669849409358755399675041263469367135430665518150110493389671646158566214130516002949975036799297119111385228596853422400303735447298026283
      q = 163800729847029979711295941089800020300275211671661376396219775666688832353701752860857691086339595920419175562271802936423756228938551439950541873798393442729921516031775531740506399414675546114663346731428381174638773512946351966471041847661507898143967764453261943807056370639171597924004988320983393199599
      c = 0x8788542cefd7490c9282c06b8d24280d56c6706b996bdf580290cdf2cb90e45efd2ce185fc07d2b916c24b0512d38ca14de0ee608a9d6003f258859bbbed97dad15c1d07410a34fd55cd8305eb43418d38f1ca6e024725b97fd9da701a39c23fe55a13d43b4bf9a3d9ebb44d7fe67bd60beffc29ec27bb4baf05ec5b250bfa68360df0d1379c066297a7878e59d27e68cf6a0da90755450827623e54e4f3d9f280fef53c7620d58decfbd10dd64e9d1d5507b5460603c58f5be70c82e2a8e613d730a950caea4c4389c5fc0521f8207ead5fb26c04eb6d0486fd6fe8d015fdabbda00139b42163acc86ffb30c12988058c6247344c42b8f3cdc984c06f4276f8
      g = Mod(3,p)
      m = discrete_log(c,g)
      print(hex(m))
      g2 = Mod(3,q)
      m2 = discrete_log(c,g2)
      print(m2)
      print(hex(m2)[2:])
    

    :::

  • Crypto常用library: pycryptodom $ pip install pycryptodome :::spoiler pycryptodome generate PEM file
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      >>> from Crypto.PublicKey import RSA
      >>> n = 0xb4f98200f1309e8a486824051051ac80790f8e66dac4744e2ce5134fb432121f41c5471e3459d01e56e64befd2034c65eb300ebf0045342221bff206b6cdda7f3349c17b08563a576731f95a64e2f00af70b5cbb2f4f388d49ce82da76ca609a6ec1529f29b0fa0bedc5764b86472e2c5ac5198cedb6f5e1e8e0ca950ea11bc4cf5e5a0497db3ad96f5a745cf902d56be394a259068fe198bc9de8fe8d034a71013f46c2ac72451211eb1127286c19467eaf3a10049942d46b0f49f3c51c01c06a2f8c94416cc1aadaeb191de959f0241ce8f32575c848bd2f4f8f84dab46e2aa7ad45de1c6060fbbee9668f8e9cb6d366b8cd6ce99f78bbef145f2b7b7e5222f762ccb95f17b1538260c2ea45571061b0d873fbe60d61dd87aa4833ac71b802f2b91d30f38e30ae9da39fbd1c53e80496f511521285b3bb1da3dc79931463d278d1fe28a77880a9f2368029c4cefffebbbd6904f85291b3606d0b5ed3efd8c1ee14538dc051274665f4b0f55d6c6e12d2cb728ac15f7a6572b71a5bd6fa01bddb0af211091bff4c8ec7e93efae4654b2abae09e35be29afbfc3f4df8e4348c525b9d8662a1ac344dadb15b953905f639b48fec7cfcfdf27cc0ad82b936d5efe7c0d891bf9752d3fb0857d38337df033e4b681d19ec8603535504d05a421036c077694482eee919a44b3296e2a4c272cbf7bbf14b6d62eb194e4ee83ba227fed
      >>> e = 0x10001
      >>> d = 0x737efcd1df1b7942a53d1927c62769a0c022066e6bd58ea8498c948b7c63ac1f18996f6ebe584732e5a0a9fbce9ade49f913bd857605b464c80738cdc22293fc33de314574a79b2a26a8c50b447174627b115c47f5c46841fb45794b351ea91245f6c8e4dcf59e4eb89b1988cf9463ca58cf8b23de9db2444f9c0e8d9c3d837c521f53f1b47c6c0d523c7720d2a655503a78a4378eb18a773080d2ae898dfd172b8597822c0ded38c008b5f4b89e6c6f09f0886caa92a90ce99a6346d897ac2281620124a8b060d4ca4bd9c6b622f8d8033f43d5b75a6fd994f50091f805c87d1e6fbdb42785f6bf1332df8a64a86d21736023720b9303b964b62a9a9480a4a7ab5fac794f583109d5663998ccc893590ebe26ae076e17c2b93c2238106612094fd4c6a56ec84ca5fa6ee3608ba3422f931828772e6732c337fcd6d4e6cb4a907d2e978227423d783c112f7a7d3e6d7c91ac7c540f0095d39842a6be534321a67d7a3fcb1c62c0f9e8a6d6e10281e10ff957449770d19f939153692c73f940450eab03f58ef55d2adf98c3f8479d05bb02997667381d3583c8f0eba6ea91bce512b001a27788309a4aa15952c73572a329b2f3acd6a11f43e3ae00532ccfbe9f157702162b534d26ca1e668d4cdbfd0116b7cb724603ea99e8aa08c90410534dd681b59350542c59523cb1259428e05e1fe0aab479c4b5af2a44d18ef713cd61
      >>> p = 0xd73e2ef8f2e4f1de44ee80070beef39943d4fa89a7a7ab4b0061e851aca7deb4f717f2baf4a0c018f3dcdab92148596bc50800fd6eb2f2e7757e0343534aea2241f0a2d34795a08f8e5ccc7959184b9cf8e3007a8ad63acd7d4b350dbf2d4caf04f4bc98d74a3b01d3b1aced745133186fd8460a2dff536a74ee4d041c988d5743cc9355144f48fe5f52db0449a46ba7c15c04001a5cb141796b5b42d9d72c36cca6d6bb8f177aee1699a47ba5d87c7ee886467af18403dbd84e102a952ebee03cc70bcf072c26b1b1f0f5094be08470c6c1769b417feffd5c89a0c373f75a350d177309618bfeb16316c660c6b2a341a984c8845081ede7c42e22cc9272aa15
      >>> q = 0xd73e2ef8f2e4f1de44ee80070beef39943d4fa89a7a7ab4b0061e851aca7deb4f717f2baf4a0c018f3dcdab92148596bc50800fd6eb2f2e7757e0343534aea2241f0a2d34795a08f8e5ccc7959184b9cf8e3007a8ad63acd7d4b350dbf2d4caf04f4bc98d74a3b01d3b1aced745133186fd8460a2dff536a74ee4d041c988d5743cc9355144f48fe5f52db0449a46ba7c15c04001a5cb141796b5b42d9d72c36cca6d6bb8f177aee1699a47ba5d87c7ee886467af18403dbd84e102a952ebee03cc70bcf072c26b1b1f0f5094be08470c6c1769b417feffd5c89a0c373f75a350d177309618bfeb16316c660c6b2a341a984c8845081eded2ff580f9f582ac79
      >>> key_params = (n, e, d, p, q)
      >>> key = RSA.construct(key_params)
      >>> f = open('./rsaprivatekey.pem', 'w')
      >>> f.write(key.exportKey().decode())
      >>> f.close()
    

    :::

  • openssl - RSA(很清楚) :::spoiler Cheat Sheet
      '''AES / DES'''
      $ openssl des-ecb –e –in xxx.txt –out yyy.out –k password (DES encrypt)
      $ openssl des-ecb –d –in yyy.out –out xxx.txt –k password (DES decrypt)
      $ openssl des-ede3 –d –in yyy.out –out xxx.txt –k password (TDES encrypt)
      $ openssl aes-128-ecb –d –in yyy.out –out xxx.txt –k password (AES decrypt)
        
      '''RSA'''
      $ openssl genrsa –out rsa_privatekey.pem –passout pass:password –des3 1024
      # (generate RSA private key)
      $ openssl rsa –in rsa_privatekey.pem –passin pass:password –pubout –out
      rsa_publickey.pem (generate RSA public key)
      $ openssl rsautl –encrypt –pubin –inkey rsa_publickey.pem –in xxx.txt –out yyy.txt
      # (use public key to encrpt)
      $ openssl rsaut –decrypt –ik i k n ey rsa_privatekey.pem –in yyy.txt –out xxx.txt
        
      #  To print out the components of a private key to standard output
      $ openssl rsa -in key.pem -text -noout
        
      # 把certificate轉成pem file
      $ openssl openssl x509 -in cert -pubkey -noout
      -----BEGIN PUBLIC KEY-----
      MCIwDQYJKoZIhvcNAQEBBQADEQAwDgIHEaTUUhKxfwIDAQAB
      -----END PUBLIC KEY-----
        
      # 把單純public key的內容(n, e)(就是上面的東西)印出來
      $ openssl rsa -pubin -in public.pem -text
      RSA Public-Key: (53 bit)
      Modulus: 4966306421059967 (0x11a4d45212b17f)
      Exponent: 65537 (0x10001)
      writing RSA key
      -----BEGIN PUBLIC KEY-----
      MCIwDQYJKoZIhvcNAQEBBQADEQAwDgIHEaTUUhKxfwIDAQAB
      -----END PUBLIC KEY-----
        
      // 產出私鑰
      openssl genrsa -out key.pem 2048
    
      // 用同一把私鑰,產出兩組不同的憑證
      openssl req -x509 -new -key key.pem -sha256 -nodes -keyout key.pem -out cert1.pem -days 30
      openssl req -x509 -new -key key.pem -sha256 -nodes -keyout key.pem -out cert2.pem -days 30
    
      // 顯示公鑰是一樣
      openssl x509 -pubkey -noout -in cert1.pem
      openssl x509 -pubkey -noout -in cert2.pem
    
      // 顯示憑證內容是不一樣
      openssl x509 -inform pem -in cert2.pem
      openssl x509 -inform pem -in cert1.pem
    

    :::

Factoring Tools