Puncte:0

Nu știu cum să abordez această problemă sau de unde să încep. Găsirea unui adversar la un joc de ascundere și legare

drapel sa

Am aceasta problema: introduceți descrierea imaginii aici

Am și versiunea python a acestei probleme aici:

import json
import sys, os, itertools

sys.path.append(os.path.abspath(os.path.join('..')))
din playcrypt.tools import *
din playcrypt.new_tools import *
din playcrypt.primitives import *

din playcrypt.games.game_bind import GameBIND
din playcrypt.simulator.bind_sim import BINDSim

din playcrypt.games.game_hide import GameHIDE
din playcrypt.simulator.hide_sim import HIDESim

def ADD(a,b):
    returnează a+b
def MULT(a,b):
    întoarce a*b
def INT_DIV(a,N):
    return (a//N, a%N)
def MOD(a,N):
    returnează un%N
def EXT_GCD(a,N):
    returnează egcd(a,N)
def MOD_INV(a,N):
    res = modinv(a,N)
    if res == Nici unul:
        raise ValueError ("Inversul nu există.")
    returnare res
def MOD_EXP(a,n,N):
    returnează exp(a,n,N)


"""
Fie p un prim cu lungimea de biți k >= 8 astfel încât (p - 1)/2 este de asemenea prim. Fie g,
h fie doi generatori diferiți ai grupului G = Z_p^*. Fie CS= (P, C, V)
schemă de angajament ai cărei algoritmi consituenți sunt după cum urmează, unde mesajul
M este în Z_{p-1}:
"""

def P():
    pi = (g, h)
    return pi

def C(pi, M):
    """
    :param pi: Parametri publici
    :param M: Mesajul care urmează să fie comis, element din Z_{p-1}
    :return: returnează cheia de commital și decommital
    """
    (g, h) = pi
    K = aleatoriu_Z_N(p-1)
    A = MOD_EXP(g, K, p)
    B = MOD_EXP(h, M, p)
    C_1 = MOD(A*B, p)
    C_2 = MOD(M+K, p-1)
    întoarcere ((C_1, C_2), K)

def V(pi, C, M, K):
    """
    :param pi: Parametri publici
    :param C: Angajarea
    :param M: Mesajul de verificat
    :param K: Cheia de dezagajare
    :return: returneaza 1 daca deschiderea este valabila si 0 in caz contrar
    """
    (g, h) = pi
    (C_1, C_2) = C
    dacă nu 0 <= K < p-1 sau nu 0 <= M < p-1:
        întoarce 0
    A = MOD_EXP(g, K, p)
    B = MOD_EXP(h, M, p)
    C_1_prim = MOD(A*B, p)
    C_2_prim = MOD(M+K, p-1)
    dacă (C_1 == C_1_prim) și (C_2 == C_2_prim):
        întoarce 1
    altceva:
        întoarce 0

"""
1. Specificați un adversar de timp O(k^3) A1 care face o interogare la oracolul său LR și
realizând Adv^{hide}_CS(A1) = 1.
"""

def A1(lr, pi):
    """
    Acesta este adversarul care este problema
    solicitând. Ar trebui să returneze 0 sau 1.

    :param lr: Oracolul furnizat de jocul HIDE
    :param pi: Parametrul public pi
    """
    trece


"""
2. Specificați un adversar de timp O(k) A2 astfel încât Adv^{bind}_CS(A2) = 1.
(Sugestie: Care este valoarea lui g^{(p-1)/2} mod p și de ce?)
"""

def A2(pi):
    """
    Acesta este adversarul care este problema
    solicitând. Ar trebui să returneze tuplu (C, M_0, M_1, K_0, K_1).

    :param pi: Parametrul public pi
    """
    întoarcere ((0, 0), 0, 0, 0, 0)


if __name__ == '__main__':

    # Eșantion de parametri aleatori
    k = 12
    print('Eșantionarea parametrilor aleatori cu lungimea de biți k = %d' % k)
    p = aleatoriu.randint(2**(k - 1), 2**k)
    în timp ce nu este_prim(p) sau nu este_prim((p-1)//2):
        p = aleatoriu.randint(2**(k - 1), 2**k)
    g = random_Z_N_star(p)
    în timp ce (MOD_EXP(g, (p-1)//2, p) == 1) sau (MOD_EXP(g, 2, p) == 1):
        g = random_Z_N_star(p)
    h = random_Z_N_star(p)
    în timp ce (h == g) sau (MOD_EXP(h, (p-1)//2, p) == 1) sau (MOD_EXP(h, 2, p) == 1):
        h = random_Z_N_star(p)
    print('p = %d, g = %d, h = %d' % (p, g, h))

    game_hide = GameHIDE(P, C)
    sim_hide = HIDESim(game_hide, A1)

    game_bind = GameBIND(P, V)
    sim_bind = BINDSim(game_bind, A2)

    print("Avantajul adversarului tău A1 este de aprox. " + str(sim_hide.compute_advantage()))
    print("Avantajul adversarului tău A2 este de aprox. " + str(sim_bind.compute_advantage()))

Complet pierdut, cum să încep?

Daniel S avatar
drapel ru
Încercați să începeți cu un exemplu numeric. De exemplu, fie $p=563$, $g=2$, $h=5$. Acum, pentru prima parte, să presupunem că avem mesaje $M_0=123$ și $M_1=345$.Interogăm oracolul **LR** și obținem (335,306). Puteți spune dacă aceasta corespunde cu $M_0$ sau $M_1$? Cum?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.