コード例 #1
0
def randInt(n):
    cryptogen = SystemRandom()
    k = log2(n)
    if(k <= 0):
        k=1
    k = ceil(k)
    r = n
    while(r >= n or r<=0):
        r = cryptogen.getrandbits(k)
    return  r
コード例 #2
0
def sameCbits():
    hashes = {}
    randomObj = SystemRandom()
    r, c = 40, 160
    nrounds = 2
    rformat = "{:0" + str(r - 2) + "b}"
    for i in range(2**(c // 2)):
        m = rformat.format(randomObj.getrandbits(r - 2))
        lastcbits = SHA3_d(m, c // 2, r + c, nrounds)[1]
        c_int = int(lastcbits, 2)
        if c_int not in hashes:
            hashes[c_int] = int(m, 2)
        elif hashes[c_int] != int(m, 2):
            print("i=", i)
            # print("Collision! Pair")
            # print(hashes[c_int], int(m, 2))
            m1, m2 = hashes[c_int], int(m, 2)
            print("m1 = ", m1, "m2 = ", m2)
            break
    return m1, m2
コード例 #3
0
ファイル: session_key.py プロジェクト: zemdom/aes-encryption
 def _generate_key(self):
     system_rand = SystemRandom()  # generates random numbers from sources provided by the operating system
     self.key_size = system_rand.choice(SESSION_KEY_SIZES)
     session_key = system_rand.getrandbits(self.key_size)
     self.session_key = session_key.to_bytes(self.key_size // 8, byteorder='little')
コード例 #4
0
from secrets import SystemRandom
from algorithms import sqm

#  USED FOR SECURE NUMBER GENERATION
crypto_gen = SystemRandom()

#  PUBLIC PARAMETERS
p = crypto_gen.getrandbits(128)
alpha = crypto_gen.getrandbits(128)

#  MAKE SURE ALPHA IS A GENERATOR AND SMALLER THAN p
while alpha > p and sqm(alpha, int((p - 1) / 2), p) != 1:
    if not sqm(alpha, p - 1, p) == 1:
        alpha = crypto_gen.getrandbits(128)

#  PRIVATE KEY GENERATING
a = crypto_gen.randrange(2, p - 2)  # KEY a
b = crypto_gen.randrange(2, p - 2)  # KEY b

#  PUBLIC KEYS
K_pub_A = sqm(alpha, a, p)  # KEY A
K_pub_B = sqm(alpha, b, p)  # KEY B

#  SHARED KEY (SECRET)
K_ab = sqm(K_pub_B, a, p)

#  CHECK SHARED KEY
if not K_ab == sqm(K_pub_A, b, p):
    print("[FATAL ERROR] Shared key's are not matching")
else:
    print(f"[PUBLIC] p = ({hex(p)}), alpha = ({hex(alpha)})")
コード例 #5
0
ファイル: PNRG.py プロジェクト: JoseCarlosNF/TE-SegInfo
    # secrets:
        Generate cryptographically strong pseudo-random numbers suitable for
        managing secrets such as account authentication, tokens, and similar.

    # secrets.SystemRandom:
        Alternate random number generator using sources provided
        by the operating system (such as /dev/urandom on Unix or
        CryptGenRandom on Windows).
        Not available on all systems (see os.urandom() for details).

    ! Considerações:
        Como pode-se notar, a biblioteca utiliza como pool de entropia as fontes fornecidas pelo sistema.
        -   /dev/urandom :: Unix
        - CryptGenRandom :: MS-Windows
"""

# 🚨 Gerador randomico SEGURO
generator = SystemRandom()
print(generator.getrandbits(1024)) # Gera um inteiro de 1024-bits
print(generator.random())

# 🕹 Gerador randomico USUAL do Python
print(random.random())

""" 
! Conclusão:
    Seguindo as documentações, ambos os geradores utilizam a mesma fonte de entropia.

    ? Podemos então afirmar que o PRNG built-in do Python é seguro?
"""