Beispiel #1
0
def challenge():
    # Define the curve
    p = 0xA15C4FB663A578D8B2496D3151A946119EE42695E18E13E90600192B1D0ABDBB6F787F90C8D102FF88E284DD4526F5F6B6C980BF88F1D0490714B67E8A2A2B77
    a = 0x5E009506FCC7EFF573BC960D88638FE25E76A9B6C7CAEEA072A27DCD1FA46ABB15B7B6210CF90CABA982893EE2779669BAC06E267013486B22FF3E24ABAE2D42
    b = 0x2CE7D1CA4493B0977F088F6D30D9241F8048FDEA112CC385B793BCE953998CAAE680864A7D3AA437EA3FFD1441CA3FB352B0B710BB3F053E980E503BE9A7FECE
    E = EllipticCurve(GF(p), [a, b])

    # generator's public key
    G = E.point((
        0x39F15E024D44228FD11C58A71C312FD64167C7D249D5677DA0DFB4B9C3ED0F90701837A5E77B5A2B74433D7FBE027CD0C73B5AA7B300F7384521AF0DC283DC6D,
        0x5F3636A89167A6FBB7B7D1AD97D11C70756835B5F1273E20C06D9E022D74648EC22A3F92C378196D137C3F2027A67381BE79E1C0D65CD9B61211A77A3842C8B2,
    ))

    # alice's public key
    A = E.point((
        0x5AA8B5CF3124C552881BA67C14C863BB2FF30D960FE41B61123D2025CDDDF0EA75E92D76326BE9FB09B9A32373FC278AC8D5CF5CA83B9E517CE347C6879BEF51,
        0x2E3DDEC1B35930B1039351B2814252186B30CE27CE15EDA4351428868AE8593AB8C61C034BA10041CCE205D7F7102C292F30AC5F3D2A2C2F3A463D837DF070CD,
    ))

    # bob's public key
    B = E.point((
        0x7F0489E4EFE6905F039476DB54F9B6EAC654C780342169155344ABC5AC90167ADC6B8DABACEC643CBE420ABFFE9760CBC3E8A2B508D24779461C19B20E242A38,
        0xDD04134E747354E5B9618D8CB3F60E03A74A709D4956641B234DAA8A65D43DF34E18D00A59C070801178D198E8905EF670118C15B0906D3A00A662D3A2736BF,
    ))

    # Ciphertext
    iv = "719700b2470525781cc844db1febd994"
    encrypted_flag = "335470f413c225b705db2e930b9d460d3947b3836059fb890b044e46cbb343f0"
    n = smart_attack(E, G, A, p, a, b)
    secret = (n * B).xy()[0]
    print(decrypt_flag(secret, iv, encrypted_flag))
Beispiel #2
0
def challenge():
    # Define the curve
    p = 310717010502520989590157367261876774703
    a = 2
    b = 3
    E = EllipticCurve(GF(p), [a, b])

    # generator's public key
    G = E.point(
        (
            179210853392303317793440285562762725654,
            105268671499942631758568591033409611165,
        )
    )

    # alice's public key
    A = E.point(
        (
            280810182131414898730378982766101210916,
            291506490768054478159835604632710368904,
        )
    )
    # bob's public key
    B = E.point(
        (
            272640099140026426377756188075937988094,
            51062462309521034358726608268084433317,
        )
    )

    # Ciphertext
    iv = "07e2628b590095a5e332d397b8a59aa7"
    encrypted_flag = "8220b7c47b36777a737f5ef9caa2814cf20c1c1ef496ec21\
                    a9b4833da24a008d0870d3ac3a6ad80065c138a2ed6136af"

    n = pohlig_hellman(G, A, E)
    secret = (n * B).xy()[0]
    print(decrypt_flag(secret, iv, encrypted_flag))