RE: maxime, is gnunet censorshipable

Maxime Devos <[email protected]> Fri, 20 Dec 2024 10:15:27 +0100
Newsgroups gmane.network.gnunet.general
Message-ID <[email protected]>
--_D4072395-A738-495F-804A-50266B699A0C_
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

>>=C2=A0 I know the meaning of the individual words, and the structure of t=
he sentence, but not the meaning of the sentence as a whole (also, I probab=
ly don=E2=80=99t know).=20

>I was wondering if the consensus of freenet is the same as the consensus o=
f gnunet. Freenet is proof of trust. I do not know for gnunet.

It would be a bit clearer if you replace =E2=80=98the consensus=E2=80=99 by=
 =E2=80=98the consensus algorithm=E2=80=99, assuming that=E2=80=99s what yo=
u mean.

I don=E2=80=99t know what Freenet uses consensus for, so I can=E2=80=99t re=
ally tell for sure.

On https://freenet.org/news/summary-delta-sync/ I see a bit about consensus=
 methods used to determine what to consider as current state in case concur=
rent updates. But it doesn=E2=80=99t mention trust anywhere. Proof of trust=
 is mentioned on https://freenet.org/news/799-proof-of-trust-a-wealth-unbia=
sed-consensus-mechanism-for-distributed-systems/, and while that blog post =
claims it is a consensus mechanism, nowhere does it mention how it goes fro=
m =E2=80=98trust=E2=80=99 to =E2=80=98consensus=E2=80=99.

Looking a bit further (on https://github.com/freenet/freenet-core/discussio=
ns/443), it the =E2=80=98proof of trust=E2=80=99 seems to be a _component_ =
of the consensus algorithm(s) rather than the consensus algorithm itself, a=
s a method to prevent Sybil attacks against the consensus algorithm.

There are a few things in GNUnet that have some kind of consensus algorithm=
 (multi-peer set reconcillation and network size estimation come to mind, t=
hough I don=E2=80=99t think the latter really counts since AFAIK it=E2=80=
=99s not a problem if different peers have a different estimate, it just ne=
eds to be a rough estimate). But, the algorithm used seems rather subject-s=
pecific, and some things simply don=E2=80=99t have and have no use for a co=
nsensus algorithm. For example, while I=E2=80=99m not too familiar with set=
 reconcillation, I got the impression that Sybil attacks are non-applicable=
 to them. So, =E2=80=9Cwhat is the consensus algorithm=E2=80=9D doesn=E2=80=
=99t really have an answer.

The first blog post mentions =E2=80=98key -> value=E2=80=99 associations. T=
he closest things to thatin GNUnet, seem to be GNS and DHT. In the former, =
the truth is simply =E2=80=98whatever has a correct signature=E2=80=99 so t=
here is no need to approximate truth by consensus, you could simply verify =
the signature instead. In the latter, for most things =E2=80=98key=E2=80=99=
 is a function of =E2=80=98value=E2=80=99 and peers can verify locally, wit=
hout extra information, whether this mapping is correct (since it involves =
hashing or signatures). In some cases multiple values are correct, in which=
 case they might be combined (I=E2=80=99m not sure whether it=E2=80=99s alw=
ays a commutative monoid, but when they are, that is kind of like described=
 in the blog post except that the algorithm is stored & run on the peer(*) =
instead of running the wasm thing)

(*) As it should =E2=80=93 then you can update and optimise the relevant al=
gorithms, and you can take into account information that does _not_ lie wit=
hin =E2=80=98key->value=E2=80=99 mappings (^). Also software freedom reason=
s. Putting software on the network (also known as =E2=80=9Csmart contracts=
=E2=80=9D) does create its own form of rigidity, even if the intention is t=
o add flexibility!  (When GNUnet DHT encounters key->value1, key->value2 ma=
ppings with multiple values, and it does not recognise the type so doesn=E2=
=80=99t know how to combine them, it just leaves the key as-is, so it can s=
till propagate =E2=80=93 not all peers need to understand every type, and a=
pplications can define their own types if they wish to.)
(^) I have a use case for this.

Another thing is that GNUnet peers aren=E2=80=99t interest in knowing the w=
hole DHT (it is, after all, a _distributed_ hash table), unlike the eventua=
l-consistency situation described on the blog (though I imagine Freenet pro=
bably has its own DHT as well).

In FS, there is also some kind of algorithm for determining whether peers a=
re leeching or contributing (with potential delays in-between, so an occasi=
onal burst of lots of asking for resources can be fine), but IIRC it doesn=
=E2=80=99t take the form of a consensus algorithm =E2=80=93 the peer needs =
to guess whether other peers are being reasonable (and communicate such inf=
ormation to other peers), but that doesn=E2=80=99t sound like it requires c=
onsensus or eventual consistency etc..

>At last but not least, I would love to know how you deployed gnunet on you=
r own please? I can not connect my own 2 peers together from the doc at htt=
ps://docs.gnunet.org/latest/developers/tutorial.html#starting-peers-using-t=
he-testbed-service . there might lack of doc.

For non-testing setup: I just used a single peer, not two peers.

For the test suite of the software I was writing:

I just used a single peer, set =E2=80=98UNIXPATH=E2=80=99, didn=E2=80=99t u=
se any transports yet, and (IIRC) directly started the relevant services in=
stead of using gnunet-arm. I didn=E2=80=99t yet need to connect multiple pe=
ers to each other, IIRC all testing so far could be done with less than a s=
ingle peer (e.g. do things like =E2=80=98only start the DHT service if all =
you are testing is communication with the DHT service=E2=80=99).

Best regards,
Maxime Devos.

--_D4072395-A738-495F-804A-50266B699A0C_
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="utf-8"

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:w=3D"urn:sc=
hemas-microsoft-com:office:word" xmlns:m=3D"http://schemas.microsoft.com/of=
fice/2004/12/omml" xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta ht=
tp-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8"><meta name=
=3DGenerator content=3D"Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style></head><body lang=3DNL-BE link=3Dblue vlink=3D"#954F72" style=3D=
'word-wrap:break-word'><div class=3DWordSection1><div><div><p class=3DMsoNo=
rmal><span lang=3DEN-GB>&gt;&gt;&nbsp; I know the meaning of the individual=
 words, and the structure of the sentence, but not the meaning of the sente=
nce as a whole (also, I probably don=E2=80=99t know). <o:p></o:p></span></p=
></div><div><p class=3DMsoNormal><span lang=3DEN-GB><o:p>&nbsp;</o:p></span=
></p></div><div><p class=3DMsoNormal><span lang=3DEN-GB>&gt;I was wondering=
 if the consensus of freenet is the same as the consensus of gnunet. Freene=
t is proof of trust. I do not know for gnunet.<o:p></o:p></span></p><p clas=
s=3DMsoNormal><span lang=3DEN-GB><o:p>&nbsp;</o:p></span></p><p class=3DMso=
Normal><span lang=3DEN-GB>It would be a bit clearer if you replace =E2=80=
=98the consensus=E2=80=99 by =E2=80=98the consensus algorithm=E2=80=99, ass=
uming that=E2=80=99s what you mean.<o:p></o:p></span></p><p class=3DMsoNorm=
al><span lang=3DEN-GB><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><spa=
n lang=3DEN-GB>I don=E2=80=99t know what Freenet uses consensus for, so I c=
an=E2=80=99t really tell for sure.<o:p></o:p></span></p><p class=3DMsoNorma=
l><span lang=3DEN-GB><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span=
 lang=3DEN-GB>On <a href=3D"https://freenet.org/news/summary-delta-sync/">h=
ttps://freenet.org/news/summary-delta-sync/</a> I see a bit about consensus=
 methods used to determine what to consider as current state in case concur=
rent updates. But it doesn=E2=80=99t mention trust anywhere. Proof of trust=
 is mentioned on <a href=3D"https://freenet.org/news/799-proof-of-trust-a-w=
ealth-unbiased-consensus-mechanism-for-distributed-systems/">https://freene=
t.org/news/799-proof-of-trust-a-wealth-unbiased-consensus-mechanism-for-dis=
tributed-systems/</a>, and while that blog post claims it is a consensus me=
chanism, nowhere does it mention how it goes from =E2=80=98trust=E2=80=99 t=
o =E2=80=98consensus=E2=80=99.<o:p></o:p></span></p><p class=3DMsoNormal><s=
pan lang=3DEN-GB><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span lan=
g=3DEN-GB>Looking a bit further (on <a href=3D"https://github.com/freenet/f=
reenet-core/discussions/443">https://github.com/freenet/freenet-core/discus=
sions/443</a>), it the =E2=80=98proof of trust=E2=80=99 seems to be a _<i>c=
omponent</i>_ of the consensus algorithm(s) rather than the consensus algor=
ithm itself, as a method to prevent Sybil attacks against the consensus alg=
orithm.<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN-GB><o:p>&=
nbsp;</o:p></span></p><p class=3DMsoNormal><span lang=3DEN-GB>There are a f=
ew things in GNUnet that have some kind of consensus algorithm (multi-peer =
set reconcillation and network size estimation come to mind, though I don=
=E2=80=99t think the latter really counts since AFAIK it=E2=80=99s not a pr=
oblem if different peers have a different estimate, it just needs to be a r=
ough estimate). But, the algorithm used seems rather subject-specific, and =
some things simply don=E2=80=99t have and have no use for a consensus algor=
ithm. For example, while I=E2=80=99m not too familiar with set reconcillati=
on, I got the impression that Sybil attacks are non-applicable to them. So,=
 =E2=80=9Cwhat is the consensus algorithm=E2=80=9D doesn=E2=80=99t really h=
ave an answer.<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN-GB=
><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span lang=3DEN-GB>The fi=
rst blog post mentions =E2=80=98key -&gt; value=E2=80=99 associations. The =
closest things to thatin GNUnet, seem to be GNS and DHT. In the former, the=
 truth is simply =E2=80=98whatever has a correct signature=E2=80=99 so ther=
e is no need to approximate truth by consensus, you could simply verify the=
 signature instead. In the latter, for most things =E2=80=98key=E2=80=99 is=
 a function of =E2=80=98value=E2=80=99 and peers can verify locally, withou=
t extra information, whether this mapping is correct (since it involves has=
hing or signatures). In some cases multiple values are correct, in which ca=
se they might be combined (I=E2=80=99m not sure whether it=E2=80=99s always=
 a commutative monoid, but when they are, that is kind of like described in=
 the blog post except that the algorithm is stored &amp; run on the peer(*)=
 instead of running the wasm thing)<o:p></o:p></span></p><p class=3DMsoNorm=
al><span lang=3DEN-GB><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><spa=
n lang=3DEN-GB>(*) As it should =E2=80=93 then you can update and optimise =
the relevant algorithms, and you can take into account information that doe=
s _<i>not</i>_ lie within =E2=80=98key-&gt;value=E2=80=99 mappings (^). Als=
o software freedom reasons. Putting software on the network (also known as =
=E2=80=9Csmart contracts=E2=80=9D) does create its own form of rigidity, ev=
en if the intention is to add flexibility!=C2=A0 (When GNUnet DHT encounter=
s key-&gt;value1, key-&gt;value2 mappings with multiple values, and it does=
 not recognise the type so doesn=E2=80=99t know how to combine them, it jus=
t leaves the key as-is, so it can still propagate =E2=80=93 not all peers n=
eed to understand every type, and applications can define their own types i=
f they wish to.)<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN-=
GB>(^) I have a use case for this.<o:p></o:p></span></p><p class=3DMsoNorma=
l><span lang=3DEN-GB><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span=
 lang=3DEN-GB>Another thing is that GNUnet peers aren=E2=80=99t interest in=
 knowing the whole DHT (it is, after all, a _<i>distributed</i>_ hash table=
), unlike the eventual-consistency situation described on the blog (though =
I imagine Freenet probably has its own DHT as well).<o:p></o:p></span></p><=
p class=3DMsoNormal><span lang=3DEN-GB><o:p>&nbsp;</o:p></span></p></div><d=
iv><p class=3DMsoNormal><span lang=3DEN-GB>In FS, there is also some kind o=
f algorithm for determining whether peers are leeching or contributing (wit=
h potential delays in-between, so an occasional burst of lots of asking for=
 resources can be fine), but IIRC it doesn=E2=80=99t take the form of a con=
sensus algorithm =E2=80=93 the peer needs to guess whether other peers are =
being reasonable (and communicate such information to other peers), but tha=
t doesn=E2=80=99t sound like it requires consensus or eventual consistency =
etc..<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN-GB><o:p>&nb=
sp;</o:p></span></p></div><div><p class=3DMsoNormal><span lang=3DEN-GB>&gt;=
At last but not least, I would love to know how you deployed gnunet on your=
 own please? I can not connect my own 2 peers together from the doc at <a h=
ref=3D"https://docs.gnunet.org/latest/developers/tutorial.html#starting-pee=
rs-using-the-testbed-service">https://docs.gnunet.org/latest/developers/tut=
orial.html#starting-peers-using-the-testbed-service</a> . there might lack =
of doc.<o:p></o:p></span></p></div></div><p class=3DMsoNormal><span lang=3D=
EN-GB><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span lang=3DEN-GB>F=
or non-testing setup: I just used a single peer, not two peers.<o:p></o:p><=
/span></p><p class=3DMsoNormal><span lang=3DEN-GB><o:p>&nbsp;</o:p></span><=
/p><p class=3DMsoNormal><span lang=3DEN-GB>For the test suite of the softwa=
re I was writing:<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN=
-GB><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span lang=3DEN-GB>I j=
ust used a single peer, set =E2=80=98UNIXPATH=E2=80=99, didn=E2=80=99t use =
any transports yet, and (IIRC) directly started the relevant services inste=
ad of using gnunet-arm. I didn=E2=80=99t yet need to connect multiple peers=
 to each other, IIRC all testing so far could be done with less than a sing=
le peer (e.g. do things like =E2=80=98only start the DHT service if all you=
 are testing is communication with the DHT service=E2=80=99).<o:p></o:p></s=
pan></p><p class=3DMsoNormal><span lang=3DEN-GB><o:p>&nbsp;</o:p></span></p=
><p class=3DMsoNormal><span lang=3DEN-GB>Best regards,<br>Maxime Devos.<o:p=
></o:p></span></p></div></body></html>=

--_D4072395-A738-495F-804A-50266B699A0C_--