ランダムバイトの生成
import tlslite.utils.cryptomath as cryptomath
n = cryptomath.getRandomBytes(20).tostring()
print (n,)
大きな素数の生成
import tlslite.utils.cryptomath as cryptomath
n = cryptomath.getRandomPrime(200, False)
print (n,)
素数かどうかのテスト
import tlslite.utils.cryptomath as cryptomath
n = 1316313479575724008406254458954831022206765279617514697838759L
print cryptomath.isPrime(n, iterations = 20)
n = 1316313479575724008406254458954831022206765229617514697838759L
print cryptomath.isPrime(n, iterations = 20)
デジタル証明書の読み込み
import tlslite.api as tls
s = open("./clientX509Cert.pem").read()
x509 = tls.X509()
x509.parse(s)
print "fingerprint=", x509.getFingerprint()
べき乗剰余
import tlslite.utils.cryptomath as cryptomath
g = 5
p = cryptomath.getRandomPrime(128)
x = 0x640F7967334E9872
y = 0x40F6BD5315A291DC
Y = cryptomath.powMod(g, y, p)
AESによるデータの暗号化
import tlslite.utils.cipherfactory as cipherfactory
key = 'khkdjsldkfs9321k'
iv = '0248264923047183'
data = '1234567890123456'
enc = cipherfactory.createAES(key, iv)
dec = cipherfactory.createAES(key, iv)
enc_data = enc.encrypt(data)
dec_data = dec.decrypt(enc_data)
if dec_data == data:
print 'ok'
else:
print 'ng'
- 16バイトブロックであることに注意
- 安全性を保障するには共有鍵は秘密にする必要がある。
TLS(証明書)
- 安全性を保障するには秘密鍵は秘密にしておく。
- 証明書はTLSLiteのサンプルで提供されていたものです。
SRP
TLS(共有鍵)
DHの理解
RSA