summaryrefslogtreecommitdiff
path: root/blog/anonimato-estatistica.md
blob: 959e682dee64092e7921f8d41778e75edd0529a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Anonimato é só estatística

Todo mundo vem caracterizado o anônimato como se fosse uma espécie de magia
que faz você ficar invisível na internet, mas é só uma estatistica e um jogo
de _guess who_. Inclusive tem como medir o quanto você é anônimo usando
algumas ferramentas matemáticas.

## O que é anonimato de fato?

Anonimato é o ato de você embaralhar algumas informações de forma que ninguém
consegue fazer um pinpoint de quem é você no meio de um espaço amostral. Então
como que uma VPN te mantém anônimo, por exemplo? Ele não te esconde, ele faz
com que todo mundo conectado a uma VPN passe pela mesma range de IPs de forma
que ninguém (do meio privado) consegue deduzir que pessoa está acessando.

Existem 2 formas de você atingir esse anonimato:

1. Se misturando na multidão, como VPNs fazem
2. Usando serviços que ninguém* consegue extrair informação útil pra te deanonimizar

<span style="font-size: 10px;">
*: ou pelo menos as pessoas que você quer não saibam quem é você
</span>

## Medindo o anonimato

Existe uma ferramenta na parte da estatistica chamada _Teoria da informação_, e
ela vai ser extremamente útil para medirmos o quão anônimo uma pessoa é,
levando em consideração que o atacante tem como obter todas as informações que
a vítima expõe.

### Bits e informação

Na teoria da informação, a unidade de informação se chama _bit_. Ele tem
relação com o _bit_ da computação, mas não é a mesma coisa. Um _bit_ representa
uma informação sobre a vítima que corta o espaço amostral pela metade.

Vamos fazer um exemplo de teste. Imaginemos que existe 10 pessoas num espaço
amostral, 5 de camisa amarela e 5 de camisa azul. A informação que você tem
sobre a sua vítima é que ela usa camisa amarela. Quantos bits equivalem a essa
informação? Visto que a informação reduz o seu espaço amostral de 10 para 5,
isso significa que você tem 1 _bit_ de informação (porque 5 é metade de 10).
Agora imaginemos que desses 5, 3 tem olhos marrons e 2 tem olhos azuis. A
informação que você tem sobre a sua vítima agora é que ela tem olhos azuis.
Quantos bits de informação equivalem a essa informação? Exatamente, _1.3219_
bits de informação. Sim, a nossa definição de bit permite que tenha numeros
reais ao invés de só inteiros.

A definição do bit segue a seguinte formula.

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;"><mrow><mi>I</mi><mo>=</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mn>2</mn></msub><mo form="prefix" stretchy="false">(</mo><mfrac><mn>1</mn><mi>p</mi></mfrac><mo form="postfix" stretchy="false">)</mo></mrow></math>

Onde _I_ é o nosso bit de informação e o _p_ é o denominador pelo qual
dividimos um espaço amostral. Note que você pode simplificar essa equação para

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;"><mrow><mi>I</mi><mo>=</mo><mo form="prefix" stretchy="false">−</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mn>2</mn></msub><mo form="prefix" stretchy="false">(</mo><mi>p</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>

E isso faz com que o numero do bit seja negativo, o que vai ser útil pra gente
medir o anonimato depois.

Esse comportamento logaritímico do _bit_ é importante, pois torna calculos de
eventos e informações mais simples. Por exemplo, pra se fazer aquele calculo de
informação que você tem naquele primeiro exemplo se usaria a regra do _E_, em
que as probabilidades e as informações se multiplicam, o que torna os calculos
chatos de se fazer. Mas quando você usa logarítimos, essas multiplicações se
tornam adições, o que significa que naquele exemplo, nos temos 2.3219 bits de
informação, o que falta apenas 1 bit pra saber quem é a vítima. Como que eu sei
disso?

### Entropia

A entropia é também medida em _bits_. Normalmente esse é o ponto que começam a
se confundir mas é bastante simples. A _entropia_ é a quantidade de bits
necessaria para se reduzir o espaço amostral de busca pra _1_. Por exemplo, se
você tem 8 pessoas num espaço amostral de busca, isso significa que são
necessários 3 bits de informação para se reduzir as suas buscas pra 1 pessoa
só. Ou seja, **a entropia é o pool de bits necessários você descobrir pra se
descobrir quem é a sua vítima**.

Então no exemplo anterior, eu disse que existem 10 pessoas no espaço amostral.
Com isso, eu posso tirar que a entropia desse espaço amostral é de _3.3219_ bits
usando a formula:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;"><mrow><mi>E</mi><mo>=</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mn>2</mn></msub><mo form="prefix" stretchy="false">(</mo><mi>s</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>

Onde _E_ é entropia e _s_ é o tamanho do espaço amostral. No caso do exemplo anterior _s_ = 10.

### Juntando tudo

Com isso, podemos fazer uma espécie de joguinho, onde a entropia é o _HP_ do
seu anonimato e a informação são os danos que você tomou. Mais especificamente

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;">
  <mrow>
    <mi>HP</mi>
    <mo>=</mo>
    <mi>E</mi>
    <mo>+</mo>
    <mrow>
      <munder>
        <mo movablelimits="false">∑</mo>
        <mi>n</mi>
      </munder>
    </mrow>
    <msub>
      <mi>I</mi>
      <mi>n</mi>
    </msub>
  </mrow>
</math>

Note que estamos aproveitando o fato da informação ser um numero negativo aqui.

A nossa entropia sempre começa com log2 do numero de pessoas da terra,
então ~33.04 bits de entropia, atualmente. Existem algumas informações que
você toma de graça.

* Sexo = 1 bit
* Nascer no Brasil = 5 bits
* Ter internet = 5 bits

E assim vai. Ou seja, logo de cara você já deve tomar 11 bits de informação, o
que sobra 22 bits de entropia de informação. Não tenha medo, pois 22 bits ainda
significa que você é 1 entre 4.194.304 de pessoas, não é algo fácil de se fazer
busca. Note que existem informações que você pode espalhar e nem sabe que isso
pode te deanonimizar, são mais uns bitzinhos que você vai tomar na sua pool de
entropia, e existem vários pontos meio escondidos, por exemplo o fingerprint do
navegador. E lembre-se que isso é levando em consideração que _toda_ informação
que você soltar é aproveitável pelo atacante, existem algumas informações que
não são aproveitáveis. Por exemplo, se você sabe que o seu atacante é uma
pessoa física normal, sem contatos estranhos com o governo, você sabe que pode
confiar que algumas informações serão mais difíceis do atacante obter.

E outra coisa é que informações podem remover a importância de outras
informações. Um exemplo bobo seria você ser católico e morar no Vaticano, a
probabilidade de você já ser um católico no Vaticano já é alta.

## Conclusão

Anonimato é estatística, é só matemática. Existe uma forma de medirmos o quanto
de informações estamos expondo, assim como medir o quão difícil é pra obter
essas informações. Isso pode ser usado pra várias coisas, pra facilitar buscas
de criminosos pela polícia, ajudar a saber se esconder melhor de mal-feitores
e até abre uma possibilidade de fazermos melhores legislações sobre o quanto
de informação as empresas podem obter dos seus usuários.