def recoverSecret(shares):
    for i in range(len(shares)):
        shares[i] = (base64.b64decode(shares[i])).decode('utf-8')
    secret = PlaintextToHexSecretSharer.recover_secret(shares)
    #Converting recovered_key to bytes using base64 module
    secret = base64.b64decode(secret)
    return secret
Exemple #2
0
def shamirs_join(list, str):
    temp = []
    msg_alpha = SecretSharer.recover_secret(list[0:2])
    msg_alpha = '1-' + msg_alpha
    temp.append(msg_alpha)
    temp.append(str)
    text = PlaintextToHexSecretSharer.recover_secret(temp[0:2])
    return text
def unsecret_num(num, secret_message):
    shares = []
    for i in range(len(secret_message)):
        sf = secret_message[i].split(
            "\n")  #each share is delineated by a newline character
        shares.append(
            sf[num])  #get share from file contents and add to share array
    return SS.recover_secret(shares).strip()
Exemple #4
0
def check_votes(myshare_file, blockchainshare_file, voter_ticket, keyfile):

    os.system("clear")
    print("----Vote count & check----")
    #Check ticket exits and has been used
    with open('tickets.csv', 'rb') as f:
        rows = csv.reader(f, delimiter=',')
        arows = []
        for x in rows:
            if voter_ticket in x:
                arows.append(x)
        #arows = [row for row in rows if voter_ticket in row]
        f.close()
    if len(arows) <= 0:
        print("Ticket does not exist")
        exit(0)
    for data in arows:
        if data[1] == '0':
            print("Ticket valid BUT not used")
            exit(0)

    #Count total votes in blockchain
    with open(blockchainshare_file, 'r') as f:
        reader = csv.reader(f, delimiter=',')
        data = list(reader)
        row_count = len(data)

    print("-> %s total vote(s) in blockchain" % row_count)

    #read local share
    print("-> Local share")
    with open(myshare_file, 'r') as f:
        myshare = f.read()
    print("[*] %s" % myshare)

    #Grab the share corresponding to voters ticket from within blockchain
    print("-> Getting share from blockchain")
    with open(blockchainshare_file, 'rb') as f:
        reader = csv.reader(f, delimiter='\n')
        for row in reader:
            for data in row:
                if data.split(',')[0] == voter_ticket:
                    blockchain_share = data.split(',')[1]
                    print("\t-> %s" % blockchain_share)

    #connect shares
    print("-> Reassembling shares")
    tmp = [myshare, blockchain_share]
    recovered_vote = PlaintextToHexSecretSharer.recover_secret(tmp)

    #decrypt shares
    print("-> Decrypting shares")
    with open(keyfile, 'r') as f:
        key = f.read()
    f.close()
    cipher = AESCipher(base64.b64decode(key))
    decrypted_vote = cipher.decrypt(recovered_vote)
    print("[*] Your vote was: %s" % decrypted_vote)
Exemple #5
0
def decrypt_secret(splits, ciphertext):
    s = PlaintextToHexSecretSharer.recover_secret(splits)
    h = SHA256.new(s.encode("utf-8")).digest()
    IV = h[0:16]
    ekey = h[16:32]
    mode = AES.MODE_CBC
    decryptor = AES.new(ekey, mode, IV=IV)
    dpk = decryptor.decrypt(ciphertext)
    dpk = dpk.decode("utf-8").replace(' ', '')
    key = RSA.importKey(b64decode(dpk))
Exemple #6
0
def recover(args):
    min = args.min
    keyfile = args.keyfile

    parts = []
    for line in open(keyfile):
        parts.append(line.rstrip('\n'))

    result = PlaintextToHexSecretSharer.recover_secret(parts[0:min])
    print("The full private key is: " + result.rstrip('\n'))
def combine_and_decrypt(data, subkeys):
    """
    Decrypt the data by recreating the original key with threshold number
    of subkeys.

    Return the decrypted data.
    """
    key = shamir.recover_secret(subkeys)
    decrypted_data = decrypt(data, key.encode())

    return decrypted_data
Exemple #8
0
def main():

    # Enter shares
    shares = [input('Enter your share: ')]
    while True:
        numofSHares = input("Still have more?\tYes\tNo\n").upper()
        if numofSHares == "Y":
            shares.append(input('Enter your share: '))
        elif numofSHares == "N":
            break
        else:
            print("You haven't answered correctly, try again\n")

    # Recover
    message = PlaintextToHexSecretSharer.recover_secret(shares)
    print('Original message:\n' + message)
def main():
    # Enter shares
    shares = [raw_input('Enter your share: ')]
    while True:
        questions = [
            inquirer.List(
                'share',
                message='Enter next share',
                choices=['OK', 'I don\'t have another one'],
            ),
        ]
        answer = inquirer.prompt(questions)['share']
        if answer != 'OK':
            break
        shares.append(raw_input('Enter your share: '))

    # Recover
    wait = animation.Wait('spinner',
                          'Generating randomness.. It may take a while.. ')
    wait.start()
    message = PlaintextToHexSecretSharer.recover_secret(shares)
    wait.stop()
    print('Original message:\n' + message)
Exemple #10
0
def dry_run():
    final_votes = []
    os.system("clear")
    print("----Counting Votes (gov)----")

    with open("BLOCKCHAIN1.csv", 'rb') as f:
        reader = csv.reader(f, delimiter='\n')
        for row in reader:
            for data in row:
                current_ticket = data.split(',')[0]
                with open('gov.csv') as g:
                    readerg = csv.reader(g, delimiter='\n')
                    for rowg in readerg:
                        for datag in rowg:
                            gov_ticket = data.split(',')[0]
                            if current_ticket == gov_ticket:
                                bs_share = data.split(',')[1]
                                gov_share = datag.split(',')[1]
                                voter_key = data.split(',')[2]
                                print("-> Ticket: %s" % current_ticket)
                                print("\tKey: %s" % voter_key)
                                print(
                                    "\n\tShares:\n\t\tBlockchain: %s\n\t\tGov: %s"
                                    % (bs_share, gov_share))

                                tmp = [bs_share, gov_share]
                                recovered_vote = PlaintextToHexSecretSharer.recover_secret(
                                    tmp)
                                cipher = AESCipher(base64.b64decode(voter_key))
                                decrypted_vote = cipher.decrypt(recovered_vote)
                                print("\tDecrypted Vote: %s" % decrypted_vote)
                                final_votes.append(decrypted_vote)

    print("\n-> Final vote counting")
    counts = Counter(final_votes)
    for key, value in counts.iteritems():
        print("%s votes for |%s|" % (value, key))
Exemple #11
0
response = horizon.submit(envelope.xdr())
assert 'hash' in response

print('Waiting for the deadline')
tts = (tau - datetime.datetime.now()).total_seconds()
margin = 5
time.sleep(tts + margin)

print('Now Alice can submit t_1_1')
envelope = Te(t_1_1, opts={})
envelope.sign_hashX(x_a)
response = horizon.submit(envelope.xdr())
assert 'hash' in response

print('Bob cannot submit t_2_2, because he leaked the secret')
envelope = Te(t_2_2, opts={})
envelope.sign_hashX(x_b)
response = horizon.submit(envelope.xdr())
assert 'hash' not in response

print('At this point, the secret is public')
params = {'limit': 1, 'order': 'desc'}
last_tx_a_1 = horizon.account_transactions(
    kp_a_1_address, params=params)
last_tx_a_2 = horizon.account_transactions(
    kp_a_2_address, params=params)
x_a_1 = extract_share_from_tx(last_tx_a_1)
x_a_2 = extract_share_from_tx(last_tx_a_2)
secret = PlaintextToHexSecretSharer.recover_secret([x_a_1, x_a_2])
assert secret == x
Exemple #12
0
class IndyProxyServer(web.Application):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.add_routes([
            web.post('/create_identity', self._create_identity),
            web.post('/secret_sharding', self._secret_sharding),
            web.post('/secret_recovery', self._secret_recovery),
        ])
        self._wallet_handle = None
        self._secret_sharer = PlaintextToHexSecretSharer()

    async def _create_identity(self, request):
        try:
            logging.debug('Creating identity wallet')
            await wallet.create_wallet(POOL_NAME, WALLET_NAME, None, None,
                                       None)
            logging.debug('Opening identity wallet')
            self._wallet_handle = await wallet.open_wallet(
                WALLET_NAME, None, None)
            logging.debug('Generating DID and Verkey')
            new_did, new_verkey = await did.create_and_store_my_did(
                self._wallet_handle, "{}")
        except IndyError as e:
            logging.error(f'Error while creating identity. Exception: {e}')
            return web.Response(status=500)

        response = {
            'did': new_did,
            'verkey': new_verkey,
        }
        return web.Response(body=json.dumps(response))

    async def _secret_sharding(self, request):
        try:
            request_data = await request.json()
            verkey = request_data['verkey']
            logging.debug('Getting signing key')
            signingkey = await did.get_signing_key(self._wallet_handle, verkey)
            shards = self._secret_sharer.split_secret(signingkey, 2, 3)
        except Exception as e:
            logging.error(f'Error while sharding secret. Exception: {e}')
            return web.Response(status=500)

        response = {
            'shards': shards,
        }
        return web.Response(body=json.dumps(response))

    async def _secret_recovery(self, request):
        try:
            request_data = await request.json()
            # shards = [shard.encode() for shard in request_data['shards']]
            shards = request_data['shards']
            logging.debug('Recovering secret')
            secret = self._secret_sharer.recover_secret(shards)
        except Exception as e:
            logging.error(f'Error while recovering secret. Exception: {e}')
            return web.Response(status=500)

        response = {
            'secret': secret,
        }
        return web.Response(body=json.dumps(response))
Exemple #13
0
from Crypto.Cipher import AES, PKCS1_OAEP
from Crypto.PublicKey import RSA
from base64 import b64decode
import encrypt
from secretsharing import PlaintextToHexSecretSharer as SS

values = [0, 4, 3, 6]
plains = [[], [], [], []]
for i in values:
    with open("pkey-%d.pem" % i) as f:
        data = f.read()
    data = data.splitlines()
    data = data[1:-1]
    data = ''.join(data)

    keyDER = b64decode(data)
    keyPriv = RSA.importKey(keyDER)

    for j in xrange(1, 6):
        with open("ciphertext-%d.bin" % j, 'rb') as f:
            data = f.read()
        data = encrypt.decrypt(keyPriv, data)
        if data is not None:
            values = data.splitlines()[1:]
            for i, v in enumerate(values):
                plains[i].append(v)
for v in plains:
    print(SS.recover_secret(v))
Exemple #14
0
from secretsharing import PlaintextToHexSecretSharer
done = False
parts = []
while not done:
    inVar = raw_input("Enter a part to restore: ")
    parts.append(inVar)
    inVar = raw_input("Done? (y/n): ")
    if (inVar.lower() == "y"):
        done = True

print PlaintextToHexSecretSharer.recover_secret(parts)
from secretsharing import PlaintextToHexSecretSharer 
done = False
parts = []
while not done:
	inVar = raw_input("Enter a part to restore: ")
	parts.append(inVar)
	inVar = raw_input("Done? (y/n): ")
	if(inVar.lower() == "y"):
		done = True



print PlaintextToHexSecretSharer.recover_secret(parts)
Exemple #16
0
#https://github.com/blockstack/secret-sharing
#Note:In production, we'd use SecretSharer, not PlaintextToHexSecretSharer. This is for readability.
from secretsharing import PlaintextToHexSecretSharer
#Split the hash into 3 pieces
SplitHash = PlaintextToHexSecretSharer.split_secret(
    "This is your encrypted private key (that you encrypted with biometric data)",
    2, 3)
#Recovery
PlaintextToHexSecretSharer.recover_secret(shares[0:2])
 def recover_shared_secret(self):
     # TODO: manage exceptions
     if len(self.collected_secrets) >= self.k:
         self.secret = PlaintextToHexSecretSharer.recover_secret(
             self.collected_secrets)
def recoverSecret(shares):
    secret = PlaintextToHexSecretSharer.recover_secret(shares)
    return secret
Exemple #19
0


w = RSAExploits.Wiener()
#we know to run it only on key-3.pem because the public exponent in that key is very large
w.run([y[3]])

n3 = n[3]
p3 = y[3].get_p()
q3 = y[3].get_q()
e3 = b[3].key.e
assert p3 * q3 == n3

tot3 = n3 - (p3 + q3 - 1)
d3 = modinv(e3, tot3)
privkey3 = RSA.construct((n3, e3, d3))
for c in cts:
    temp = decrypt(privkey3, c)
    if(temp):
        plaintexts.append(temp)
        break
#cut off the congratulations messages and break up each line
pt1 = plaintexts[0].strip().split("\n")[1:]
pt2 = plaintexts[1].strip().split("\n")[1:]
pt3 = plaintexts[2].strip().split("\n")[1:]

#zip them together and recover the secret.
#zipped so we can combine pt1[n] pt2[n] and pt3[n] easily 
for i in zip(pt1, pt2, pt3):
    print(PlaintextToHexSecretSharer.recover_secret(i))
    n.append(
        0xB17ACF77309DCCDCF05A4259212EE3B148B24E52FD39AAD9CB558CAA4C49A35BED6904037A065F92F3AFFE60DC0123F7C79F1FD52CF8FCB03095E33CCEE9BE8D55796B610077FD06DE336CD2553F0695D809BF0EEEABCEA5085387FA2670DC81B40F4334A2093446C5E53635A7B7FB3D1561A62D91B9669361294B4E68CB1548D9C48DF3EF4DA9A9B3C8EEDD4F9901C3B29F5593DB28023AA7C39400D21A53D7CD014F37D1687C7A7C7F3598FFD7D024941BF62806A92368D73418C05AAA67145D17306DEC22BE5E35473B83D9A6B71ADE5ABC3440D6E9DA0D5A122AD11DEACC45C5D2124755F1A60C919EF7EF4220A1ED253EB1ADA0DE0308681C3D0F558DEA7DE1E396430782A1DDA11B44E1D6A11922E66D77285301E212C2CDA17709008CBE138AA6C9EE152001700D3F2BF72DD8B168F9B6764F5BF9E7E736D4FB9B4053BF5E205D7F85404FAE20AA9AB5131E8EDC17DD1E134B8343F080AE05328925947612EEAF4FB4438C0CF82B6C938FEFEBF8583EDA54494858D033F6AF03FB52F8C02EC40C6F1041F9195499CE3BCA7BF6924631ED3691E976707ED3E701B7637AE3C8B84DF5B2864A7283C6B7BBCADE2C0E29815F930506E472DCF3E4C97890F91BF9FE224E4C2E75325907228DCDA9D7CCE17872540C4E2E99FCE1F91A755F2372CFC71808E779F4090671B00E88B7B7A45DD304A81CB04B7A18F4567ED77305
    )
    for i in range(10):
        for j in range(i + 1, 10):
            gcd = fractions.gcd(n[i], n[j])
            if gcd != 1:
                e = long(65537)
                q = n[i] / gcd
                p = gcd
                return decryptFile('ciphertext-3.bin', e, p, q)


if __name__ == "__main__":
    message1 = factorKey1().split('\n')
    #exit()
    message2 = factorKey2().split('\n')
    #exit()
    message3 = factorKey3().split('\n')
    #exit()
    message4 = factorKey0().split('\n')
    #exit()

    print SS.recover_secret(
        [message1[1], message2[1], message3[1], message4[1]]), '\n-----------'
    print SS.recover_secret(
        [message1[2], message2[2], message3[2], message4[2]]), '\n-----------'
    print SS.recover_secret(
        [message1[3], message2[3], message3[3], message4[3]]), '\n-----------'
    print SS.recover_secret(
        [message1[4], message2[4], message3[4], message4[4]]), '\n-----------'
Exemple #21
0
# get the number of lines of our key
with open("lines.txt", 'r') as lines:
    sh = int(lines.readline())  #  required shares
    n = int(lines.readline())  #  number of lines

print("Napíšte " + str(sh) + " ID použité na obnovu kľúča.")
for i in range(sh):
    ids.append(int(input()))

# for each line open shares
for l in range(n):
    new_share = []
    for s in range(sh):
        dir = "shares" + str(ids[s]) + "/"
        fname = "share" + str(ids[s]) + "_" + str(l) + ".txt"
        try:
            with open(dir + fname, 'rb') as f:
                new_share.append(f.read())
        except FileNotFoundError:
            print("Chyba: Súbor sa nenašiel.")
    shares.append(new_share)

#print(shares)

with open("privatekey.asc", 'w') as file:
    for l in range(n):
        secretLine = PlaintextToHexSecretSharer.recover_secret(shares[l][0:sh])
        file.write(secretLine)

print("Kľúč bol úspešne obnovený do súboru privatekey.asc")
Exemple #22
0
            # check if the equation x^2 - s*x + n = 0
            # has integer roots
            discr = s*s - 4*n
            if(discr>=0):
                t = Arithmetic.is_perfect_square(discr)
                if t!=-1 and (s+t)%2==0:
                    return d

for i in range(10):
    if keys[i] is None:
        k = load_key(i)
        x = wiener(k.e, k.n)
        if x is not None:
            impl = RSA.RSAImplementation(use_fast_math=False)
            partial = impl.construct((k.n, 0L))
            partial.key.e = k.e
            partial.key.d = x
            keys[i] = partial
            try_decrypt(keys[i])

# Found with factorization outside the script
plaintexts[0] = """Congratulations, you decrypted a ciphertext!  One down, two to go :)
1-32a1cd9f414f14cff6685879444acbe41e5dba6574a072cace6e8d0eb338ad64910897369b7589e6a408c861c8e708f60fbbbe91953d4a73bcf1df11e1ecaa2885bed1e5a772bfed42d776a9
1-e0c113fa1ebea9318dd413bf28308707fd660a5d1417fbc7da72416c8baaa5bf628f11c660dcee518134353e6ff8d37c
1-1b8b6c4e3145a96b1b0031f63521c8df58713c4d6d737039b0f1c0750e16e1579340cfc5dadef4e96d6b95ecf89f52b8136ae657c9c32e96bf4384e18bd8190546ff5102cd006be5e1580053
1-c332b8b93a914532a2dab045ea52b86d4d3950a990b5fc5e041dce9be1fd3912f9978cad009320e18f4383ca71d9d79114c9816b5f950305a6dd19c9f458695d52"""

from secretsharing import PlaintextToHexSecretSharer as SS

print SS.recover_secret(x.split('\n')[2] for x in plaintexts if x is not None)
Exemple #23
0
shares = []
for secretCollection in plaintexts:
    secrets = secretCollection.splitlines()[1:]
    for secret in secrets:
        shares.append(secret)

for i in shares:
    for j in shares:
        if(j==i):
            continue
        for k in shares:
            if(k==i or k==j):
                continue
            try:
                flag = PlaintextToHexSecretSharer.recover_secret([i,j,k])
                if('flag' in flag.lower()):
                    print(flag)
            except:
                pass
            for l in shares:
                if(l==i or l==j or l == k):
                    continue
                for m in shares:
                    if(m==i or m==j or m == k or m==l):
                        continue
                try:
                    flag = PlaintextToHexSecretSharer.recover_secret([i,j,k,l,m])
                    if('flag' in flag.lower()):
                        if('ndQzjRpnSP60NgWET6jX' not in flag):
                            print(flag)
Exemple #24
0
from secretsharing import PlaintextToHexSecretSharer

plaintext = []
secretlist = []

for x in range(1, 6):
    lines = open('plaintext-' + str(x) + '.txt').read()
    plaintext.append(lines.splitlines()[1:])

for i in range(4):
    secretlist.append([])
    for j in range(5):
        secretlist[i].append(plaintext[j][i])
    print(PlaintextToHexSecretSharer.recover_secret(secretlist[i]))
Exemple #25
0
from secretsharing import PlaintextToHexSecretSharer

shares = PlaintextToHexSecretSharer.split_secret("{'address':'Sainte Catherine' , 'telephone': 524-857-9127}", 2, 3)

print('shares:', shares)

print('Recover information from 1 and 2:' + PlaintextToHexSecretSharer.recover_secret(shares[0:2]))
print('Recover information from 1 and 3:' + PlaintextToHexSecretSharer.recover_secret([shares[0],shares[2]]))
print('Recover information from 2 and 3:' + PlaintextToHexSecretSharer.recover_secret(shares[1:3]))
try:
    print('Recover of information from 2:' + PlaintextToHexSecretSharer.recover_secret(shares[1]))
except:
    print('Not enough available information')
    


Exemple #26
0
y.append(m.split('\n')[2])
z.append(m.split('\n')[3])
print m
"""
Congratulations, you decrypted a ciphertext!  One down, two to go :)
3-17e568ddc3ed3e6fe330ca47a2b27a2707edd0e0839df59fe9114fe6c08c6fc1ac1c3c8d9ab3cf7860dac103dff464d4c215e197b54f0cb46993912c3d0220a3eb1b80adf33ee2cc59b0372c
3-b69efb4f9c5205175a4c9afb9d3c7bef728d9fb6c9cc1241411b31d4bd18744660391a330cefa8a86af8d2b80c881cfa
3-572e70c5acfbe8b4c2cbd47217477d217da88c256ff2586af6a18391972c258bbea6143e7cd2ff6d39393efeb64d51d9318a2c337e50e2d764a42173bc3a1d5c7c8f24b64043daf5d2a8e9f4
3-e9e6850880eb0a44d36fe9f2e5a458c6da3977b7fcd285afa27e9bfc116b1408570991504116b81864b03a7060bfd5d3fb6e007bb346f276d749befd545d1489c4
"""

# key-1.pem, ciphertext-5.bin
(p, q) = fermat(n[1])
m = decrypt(p, q, c[4])
x.append(m.split('\n')[1])
y.append(m.split('\n')[2])
z.append(m.split('\n')[3])
print m
"""
Congratulations, you decrypted a ciphertext!  One down, two to go :)
5-7d29041c468b680fcff93c16011a2869f17de75b929b787503b412becde0321ec72fe1e499f2150a1dacb9a5f701c0b37470049dd560cef5163543469817971f50782f763f0b05ab7088f7ae
5-a7a1e271cf263279cece532b540545fa539b0f3650e2929163b02ee5459debdc53c1e07149eb2153015bb5c88e6270e8
5-149480c5c75cbe320564adfa432ac8ea241e048ed39c8bc6be14ca80c392487f43a7882075d785d62cb314ea6c89a6b5f28adfa56ec481e124567b88241de2a6cabcc7ec9de3acac8be5375b
5-7285289084282d559573f68eef10191091d76d6670014202670651f867cd2bc8640a86eef1c1e482affc7ae801fa446956c2186972fb6b7bac88c91d050c9d3cca
"""

print SS.recover_secret(x)
print SS.recover_secret(y)
print SS.recover_secret(z)
# FLAG{ndQzjRpnSP60NgWET6jX}
Exemple #27
0
            os.remove(file_path)


if __name__ == '__main__':

    contract_state, secret_pieces, enc_messages, doub_enc_messages, personal_keys, beneficiaries = create_test_scenario(
    )

    # test object load
    user_contract = LegacyUserContract.load(contract_name)
    if contract_state != hash(user_contract):
        say("An error occurred while loading the contract object.", 2)

    # try to recover secret with 1 out of 3 secret shares (should fail)
    try:
        recov_secret = PlaintextToHexSecretSharer.recover_secret(
            secret_pieces[0])
    except:
        pass
    else:
        say(
            "This is weird. It shouldn't be possible to recover a secret with only one piece",
            2)

    # try to recover secret with 2 out of 3 secret shares (should work)
    try:
        recov_secret = PlaintextToHexSecretSharer.recover_secret(
            secret_pieces[0:2])
    except:
        say("Could not recover secret.", 2)

    # check if recovered secret matches original one