sábado, 28 de setembro de 2024

Como Israel recruta espiões em territórios hostis

Os ataques "cirúrgicos" de Israel precisam de informações precisas.

Naturalmente, as pessoas visadas por Israel estão em constante movimento o que coloca desafios aos sistema de recolha de informação. No sentido de ter informações fidedignas e em tempo real, Israel instalou uma infraestrutura confidencial de recolha de informações que usa a matemática.

Muita gente sabe muito mas ninguém sabe como a Mossad capta agentes locais sem prévio contacto com as pessoas mas, neste poste, penso que vou conseguir explicar o processo.

Tudo tem a ver com a matemática!


Definição da Soma e da Multiplicação sobre a curva elíptica com parâmetros a e p.

Começamos por ter uma função que soma dois pontos da "função elíptica", considerando a soma de dois pontos iguais, Y = G+G, e de dois pontos diferentes, Y = G+X. As variáveis são dois pontos inteiros, por exemplo G = (1; 4). 

#Eliptic Curves D-H
#G e G são iguais, m é a inclinação da tangente em G
def f_sumGG(G, a, p):
  numerator = 3 * G[0]**2 + a
  denominator = 2 * G[1]
  m = (numerator * pow(denominator,-1,p))% p
  x3 = (m**2 - 2 * G[0]) % p
  y3 = (m * (G[0] - x3) - G[1]) % p
  return [x3,y3]

#G e X são diferentes, m é a inclinação da secante G-X
def f_sumGX(G, X, p):
    numerator = X[1] - G[1]
    denominator = X[0] - G[0]
    m = (numerator * pow(denominator, -1,p))% p
    GplusX = (m**2 - G[0] - X[0]) % p
    GplusY = (m * (G[0] - GplusX) - G[1]) % p
    return [GplusX, GplusY]

Definida a Soma, posso definir a multiplicação da constante K por G:

def f_multKG(k, G, a, p):
    points=bin(k)[3:]
    kG = G
    for point in points:
        kG = f_sumGG(kG, a, p)
        if int(point) == 1:
            kG = f_sumGX(kG, G, p)
    return kG


O programa é fácil de arranjar por qualquer pessoa.

São apenas 22 linhas de código que qualquer pessoa pode ter acesso bastando pedir ao ChatGPT "Por favor, escreve uma função em Python que calcule a multiplicação de K por G sobre a curva elíptica com os parâmetros a e p sem usar livrarias, usa a função pow()" .


Israel lança o Isco.

A Mossad arranja valores para K (que é a chave secreta da Mossad) e para o parâmetros a e p, que vão ser tornados públicos. Depois, aplica a multiplicação a estes valor e também publica o resultado.

chave_secreta=473829046382980473829868718274
a,p,G=5,2**256-189,[1,4]
chave_publica=f_multKG(chave_secreta,G,a,p)
print(f"5.256-189.1.4.{chave_publica[0]}.{chave_publica[1]}")

A mensagem tornada pública pela Mossad, distribuída em papelinhos, por SMS ou email vai ser um código com 163 algarismos:

Fig. 1 - Mensagem hipotética distribuída pela Mossad em ambientes hostis 

Um peixe local apanha o isco.

Não há nenhuma sociedade em que 100% das pessoas estejam a favor da situação. Vamos supor que alguém sabe alguma coisa que quer transmitir.

Começa por criar a sua chave privada e, depois, "desencripta" a chave pública que copiou do papelinho.

chave_secreta_agente=82870386910296782984876910472
#vem na mensagem da Mossad
a,p,G=5,2**256-189,[1,4]
codigo = [55811191593709602853926568918035068481053747260245360822840044338921076924341,
23860585888823783211136194125431574751622520367305324102314011606158956406966]
#Vai arranjar a password para encriptar a informação
password_agente = f_multKG(chave_secreta_agente,codigo,a,p)
print(password_agente[0])

73168591626276748072330606828295491479388237978380640751100726756479473482801

O agente local usa este número como password. Como o MSWord só permite uma password com 15 caracteres, vai usar apenas os primeiros 15 dígitos do número.

O documento começa com um ID pessoal que, depois, o agente vai usar para se identificar, por exemplo:

"O homem que apanhou o autocarro mas que não tinha bilhete"


O agente envia o ficheiro encriptado e a sua chave pública.

chave_publica_agente=f_multKG(chave_secreta,G,a,p)
print(f"5.256-189.1.4.{chave_publica_agente[0]}.{chave_publica_agente[1]}")

O agente cria um endereço anónimo de email, por exemplo, 

O texto do email vai ser apenas:

17904660344624983692271800371172740907315884248482236379634884222345322969516.110331591911534667029005267996898080201211164132628812216399004768632937232038 


É aqui que aparece a matemática.

Quando a Mossad usar o código enviado no email, vai conseguir saber qual a password usada pelo agente na encriptação do ficheiro.

codigo_agente = [17904660344624983692271800371172740907315884248482236379634884222345322969516,
110331591911534667029005267996898080201211164132628812216399004768632937232038]
chave_secreta=473829046382980473829868718274
a,p,G=5,2**256-189,[1,4]
password_partilhada=f_multKG(chave_secreta,codigo_agente,a,p)
print(password_partilhada[0])

73168591626276748072330606828295491479388237978380640751100726756479473482801

Repare que deu exactamente o mesmo número obtido previamente pelo agente local.


Com a informação publicamente trocada, não é possível calcular a password.

Com a informação do papelinho e a mensagem enviada pelo agente local, ninguém é capaz de obter a password obtida na encriptação do ficheiro MsWord. Apenas quem tiver a chaves privada da Mossad é que o consegue fazer.


A mensagem pode ser de um agente contrário.

A confirmação de que a informação tem valor é obtida pela comunicação social. Se, por exemplo, o agente comunica "O terrorista XPTO está neste momento no carro branco que circula rumo a Norte".

Se mandando um míssil contra o carro depois vem a notícia "Última Hora, XPTO seguia num carro que foi atingido por um míssil", fica confirmado que a informação era boa.

Depois, é criada uma tabela em que cada agente identificado pelo seu ID sobe ou desce em termos de credibilidade.


A informação é paga.

É decidido o valor da informação e atribuído um valor, por exemplo, consta que a informação que levou ao abate do Ibrahim Aqil foi avaliada em 7 milhões de USD e que a informação que levou ao abate do Hassan Nasrallah foi avaliada em 30 milhões de USD.

Vai sendo construída uma tabela onde, além da credibilidade do agente local, vão sendo somados os valores dos prémios. Um dia, recebendo a Mossad um e-mail com um ficheiro encriptado que refira: 

            "O homem que apanhou o autocarro mas que não tinha bilhete"

            "50000 USD - IBAN 456327458382743757858478376363"

São depositados 50000 USD nessa conta.


Para que é necessário calcular o nível de confiança do agente?

A Mossad não conhece os agentes locais nem lhes envia mensagens de responda. Tudo é construído através da avaliação do impacto das mensagens enviadas pelo agente local.

Se um agente refere um alvo importante que está num local com muitos civis, caso essa notícia seja falsa, vai-se traduzir num fracasso com impacto negativo. Então, tem de ser ponderado o valor do alvo, os danos colaterais e a credibilidade do agente.

Também, por vezes, é necessário "resgatar" agentes em perigo ou preparar a chegada de operacionais o que pode precisar de agentes no terreno. Naturalmente, apenas agentes locais com um elevado grau de confiança. 

0 comentários:

Enviar um comentário

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Hostgator Coupon Code