wiki:TLSLiteの短いソースコード集

ランダムバイトの生成

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)
  • 適切なiterationsの値とは?

デジタル証明書の読み込み

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) # (Y = g^y mod 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