[Music]
hello everyone as you can clearly see on
the screen
um the title of the talk is trusted cdns
without gatekeepers so i'll be talking
about web3 blockchain no i'm not no
there's not going to be any any mention
of blockchain
um
so uh trusted cdns without the
gatekeepers uh who am i uh my name is
mihao rishikovojniak
um
over the years i've i've been on all the
different sides of of tech and internet
i've been an activist i've been on the
policy side somewhat i've been
i handled tech support and information
security for uh journalists and others
at risk individuals
and i managed infrastructure and now i'm
doubling a little bit in in journalism
in tech journalism myself
but for the for the specific um
uh for this specific talk what is what
is probably most important is that i
i've been a uh
chief information security officer and
head of infrastructure at occrp anybody
remembers occrp
um the panama papers says more yeah
there we go that's yeah yeah so
not surprisingly websites hosted by
occrp tended to have very little traffic
and then suddenly very very very much
traffic
uh so that was an interesting uh
interesting thing that got me thinking
about um how how can we make websites
resilient how can we make websites you
know stay up and running
without relying on things like you know
cloudflare uh because cloudflare um
so um
i've given a talk two years ago at hope
2020 called censorship is no longer
interpreted as damage and what i said in
this talk uh are you looking at the
screens is it is it visible okay so
because there's going to be information
on the on the slides but i will be also
trying to say it all out loud so in that
talk i covered
the first part let's let's say of of
making websites resilient and
or my
my idea of making websites resilient and
that was a
focused on sane website setup uh right
don't have a wordpress with 50 plugins
because that will make you cry and this
will make your server cry and this will
make your visitors cry
caching and micro caching static site
generators
and coping with downtime when when that
happens so i would implore you to watch
that talk at some point but it's not
necessary to
have what have watched that talk to to
be able to uh
follow this talk uh but it's it it might
be useful uh on its um
on its own some of the things i will
repeat a little bit uh from that talk
here because they are relevant so
anybody here runs a website that every
now and then gets a bit of traffic that
makes the server go like
[Music]
okay
so uh my takeaway from from doing this
and and and having dealt with downtime
and all of that is that whatever it is
it is almost certainly not a ddos you
are almost certainly not dealing with
the ddos your website is down not
because of a ddos it is almost certainly
down because it's probably just organic
traffic that is hitting your uh your
dynamic cms
is the term dynamic cms
understandable i assume it is right so
it's things like wordpress right
data is in the in the database somewhere
then there's a bunch of code and for
every request roughly uh you get the
data gets pulled from the database you
know html gets rendered pushed to the
user right that's a lot of work
um
and and this means that there's uh you
would be amazed how few uh requests per
second the standard wordpress site can
handle right unless you you're doing
some fancy stuff like micro caching but
then of course there are the plugins uh
for cmss and i'm focusing on wordpress
because it's the most popular one and
and also it gave me the most grief
uh but things like over 90 90 wordpress
themes plugins backdoored in supply
chain attack right
uh yes that's that's what happens
because you have a plugin that somebody
wrote five years ago and then stopped
you know updating
uh and there's a bug or somebody sold
the plugin
to some other company that said hey
we're going to buy and support your
plugin here's some money thank you and
now they have supply chain attack
against any website using its plugin
great right
but thankfully you would not believe
there are plugins for fixing compromised
wordpress websites
don't
this is not the solution right uh just
make regular tested backups
another way of dealing with uh with uh
let's say uh website downtime mainly
when it's related to censorship right
mainly when there are some bad people on
the internet somewhere that decide you
know what people should not see your
website we don't like we don't like your
website and nobody should like your
website nobody
should see your website
is you know tor i2p these kinds of these
kinds of tools that give people like us
access to websites that other people
don't want us to have access to right
the problem with these tools these are
amazing tools and i love them fondly and
i use them all the time the problem with
them from the perspective of a person
running a popular ish news website is
that
it is
uh
unreasonable to expect that the
population of a whole country switches
to tor browser just to keep seeing your
website that's not going to happen
there's going to be a you know a bunch
of people who will who will do this and
i strongly strongly implore you to have
a you know
onion hidden service for your for your
website that's always a good idea just
just do it it's really not that much
work
but
making sure that your website is
available in places where it might be
censored is not a tor shaped problem tor
shape's problem is i want to have access
to a website that is censored it's not
i want my website to be accessible to
everyone uh for whom it is censored
right it's just the other side of the
coin
so yeah like website visitors or your
website visitors will not switch to
those tools uh on mass and the same goes
for brave same goes for the changing dns
settings all of this we've seen
situations where
changing dns settings did happen and
mass right but that is not something you
can really expect and rely on if you're
running a website uh that you want to
stay up uh in places like i don't know
azerbaijan right
so
then you know the the standard response
is well you can always use cloudflare
right cloudflare is great
and uh apparently about like 19 19 of
all websites think that this is a good
solution
and just by the by the virtue of that
number that tells me that this is not a
good solution right like centralizing
things giving 20 almost 20
of all websites to be controlled and man
in the middle by a single company
yeah i i don't think i don't think
that's a great solution i'm i'm sure
that cloudflare service is is great but
it's it's just it does it strikes me as
a little bit um
uh odd especially that those those
companies will drop your site like a hot
potato if it's just unconvenient for
them to continue hosting your site
and as as the ceo of cloudflare said
right after they took down daily stormer
um
a small number of companies will largely
determine what can and cannot be online
and as much as as i am the on the polar
opposite of political spectrum as from
the daily stormer uh i also find this
disturbing right this is too much power
for a private company to be able to say
we have you know almost 20
websites of like all of the whole
internet uh we can just decide which
ones stay up and which would go down
that's great right
um
so uh
we will have a talk uh hands up who will
have a talk with me boom these guys uh
in two hours at 4 p.m in envelope
not talk sorry workshop on making sense
of social media freedom speech freedom
of speech and fascists
and i do have opinions on the daily
stormer situation but this talk is not
about that the workshop will be more
about that so if if you want to have
this conversation let's have it there
um
today yeah 4 pm envelope
and so but the problem with centralizing
putting all of our eggs in in those few
few baskets like amazon aws
uh
cloudflare fastly akamai these guys
right it's not just that that the
decision that they might make right it's
not just like oh we don't like this
website we're gonna take you down
because they're too big an operation to
really care about most of those websites
uh but
the bigger the bigger problem is also
that all of those companies um
tend to go down on a regular basis
have you noticed this like so uh fastly
outage june 22nd to 2021 akamai a major
outage due to dns bugs uh it's never it
cannot be dns it's never dns it was dns
uh july 23rd last year
then amazon web services uh third outage
in a month december 22nd last year and
cloudflare outage june 21st
today right if you have if you happen to
use all four of them
right and i have seen websites that use
all four of them for some inexplicable
reason because it's just easier to you
know uh hotlink a a piece of javascript
from fastly and you know you have some
of your content on akamai and then you
have some your website is behind
cloudflare and then there's something on
cloudfront because somebody put it there
what are you what you're gonna do right
now you have all of those four companies
all of their infrastructure has to stay
up for your website to stay up and over
the last year
more than four times they went down
right so now you quadrupled your chance
that your website will be down and
um
yeah
and there's nothing really you can do
once once once it down like an outage
like this hits right because you don't
know how long it will be you don't know
how much energy you can
uh invest into this and because maybe
that will be up in five minutes or you
know three hours or it's a facebook
shaped uh
screw-up and you know
how long is the eight hours of global
outage that was fascinating
anyway
the point is people make mistakes
yes people make mistakes there should be
okay there
software has bugs and hardware fails and
monocultures are not resilient right uh
if you have if you have plenty of small
companies that handle a small part of of
the internet infrastructure then any
single one of them going down is not
that much of a deal right a person
making a mistake at like a small
provider somewhere yes some users will
lose access to the internet or some
websites will go down but it's not 20 of
the internet going down because somebody
made a mistake or some software had a
bug right where you put all your eggs in
in those few huge gigantic
enormous galaxy sized baskets
then a a
proper proper bug proper correct
correctly placed a mistake
will take 20 of the internet down and
that's kind of you know not really okay
uh and then who here uses cloudflare
yes so if something goes pear-shaped uh
really pear-shaped uh switching from
cloudflare to
like to get your website off of
cloudflare can take up to 48 hours right
because you have to make you have to
move the ns records you have to move the
name servers somewhere else and ttl on
those is usually 24 hours
uh and then caching so
now you have now you now you have to
make a decision do you wait for
cloudflare to go up or you wait 48 hours
for your website to you know start uh
start working again
this is this is i find that problematic
right
on the other hand of course it would be
quite unreasonable to expect that every
news website or investigative journalism
outlet or or you know human rights
organization would roll
out their own self-hosted infrastructure
that would be the size of cloudflare so
that it would uh it could uh ingest or
handle huge spikes of traffic and
gigantic ddoses and all that that's not
going to happen right those
organizations are sadly
extremely underfunded they're running on
shoestring
budgets if there are any founders of
founders here please by all means fund
those organizations more especially
their their tech departments they really
really need this and funding tech uh
like infrastructure in those
organizations and information security
in those organizations somehow is not
considered sexy
whatever that means
please reconsider if if
if you have the the power to fund those
organizations a little bit better but
yes infrastructure is expensive and
no single organization will be able to
you know deploy a large enough
infrastructure to to be able to
withstand huge spikes of traffic on
their own this is just not not going to
happen hence we have cloudflares and
akamais of this world but maybe those
costs could be shared maybe we could
pool those resources right maybe we
could have
multiple organizations saying look we
have an infrastructure usually our
traffic is you know let's say 10 of our
of our capacity right uh so we have 90
margin in case our traffic goes up let's
say we have 10 of those organizations
pulling resources and saying
so now we suddenly have access to the
bandwidth of all of those organizations
if hits the fan on our website we
can rely on this bandwidth right
so that's kind of that's kind of the
idea that i have of trying to
create a
piece of software that would allow us to
build a community cdn
that multiple organizations could come
together and say you know use we're
using this software on our website and
if if our website goes you know if our
infrastructure goes down the website
will continue to stay up
thanks to the other organizations in our
little cluster in our little community
right and
the way it would have to work
is uh
pooling the infrastructure and resources
of multiple organizations
and originally no new infrastructure uh
uh investment should be necessary right
because that's not gonna happen you're
not gonna convince uh you know 10 ngos
like hey how about you invest a lot into
this shiny new thing to build this whole
new infrastructure that's not going to
happen right so this has to work on the
infrastructure they all they already
have if they're self-hosting right uh
there's there has to be minimal
organizational overhead no new entity or
organization or anything like that that
needs to be set up and saying okay we're
gonna you know set up a new organization
put all of our infrastructure budget in
that organization and that will
like uh handle the infrastructure needs
for all of those organizations the
cluster that's not gonna happen because
that's too much organizational overhead
right those organizations will not agree
uh
to to do this because it also gives away
a little bit of power it also gives away
a little bit of control and that's kind
of like
difficult
uh
this uh the thing that i'm thinking
about and i will start describing it in
a moment
would kick in only when a site is down
the reason why i think this is a good
thing and not everyone might agree the
reason why i think it's a good thing is
because you can tell all those let's say
10 organizations look we're building
this cluster this magical community cdn
cluster thing uh but until the websites
are running fine you will not have any
new bandwidth costs right no random band
no no random requests will start hitting
your infrastructure immediately it's
only where something when something is
actually happening
with with website of one of those
organizations where when when the
bandwidth of other organizations is
starting to be used right
uh no tls private keys shared and no
other kind of benevolent monster in the
middle situation right if you're using
cloudflare cloudflare sits like uh
terminates your tls uh so it can
technically see
your traffic and and all of this this is
not something that i would be okay with
and and many organizations that i'm
thinking about of like
suggesting that they should use this
kind of approach would also not be okay
with um
which is one of the reasons why some of
those organizations are just not using
cloudflare uh so i also want to avoid
this
monster in the middle situation
uh and it absolutely has to be
transparent for visitors in the sense of
no no uh special software or a special
setup needed on the part of visitors
right a person who had been visiting
your website should for them the website
should just work even if it doesn't uh i
know it sounds weird but trust me we're
going to get there right
and the reason why this is important is
what i said before right
millions of people in the country will
not download the tor browser millions of
people in the country will not download
your special snowflake solution to
whatever problem you're trying to to
solve you have to like
my my
my aim is to try to figure out a way uh
such that uh visitors don't have to do
anything right website admins deploy
this and visitors like okay yeah it
works oh it works a little bit slower i
wonder what's happening what's happening
is your website is down and now it's
pulling content from somewhere else but
the visitor is like yeah okay that just
works fine
there are quite a few assumptions here
uh so this will not work for certain
situations one of the assumptions is
that the visitors must be using modern
mainstream browsers because
i'm relying heavily on
modern
you know web
apis and stuff i will explain in a
moment and javascript has to be enabled
so again not everyone uh not everyone
will be happy right that's why i said
run an onion
onion hidden service for everyone who is
not happy with this setup because they
will probably have a tor browser already
and they will be very happy to use it
right
as i do
this
the solution that i'll be talking about
is not going to work for massively
dynamic web applications think facebook
or or twitter like twitter shaped things
right where the content just flows
constantly and and all of that right
this is uh this is more i'm focusing
more on
somewhat static sites think news sites
right where there's a
bit of content published every now and
then and every now and then of course
can be uh can be quite frequently it can
be you know many times a day or many
times an hour but the the let's say
the shape of content is kind of like
uh it can be approximated by a static
site right it can still be a dynamic
site can still you know do dynamic
things but you you should be able to
cache
a piece of content right as let's say
html html file or statify the site
somehow right
so so
yeah
obviously this has to work with any any
content type but currently huge files
are tricky for reasons that might become
obvious in a moment
uh and video streaming is really not a
thing with uh with with what i'm
building uh because i have to somehow
limit the the scope right there's
trying to do everything at the same time
is going to be
difficult and finally and i promise this
is the last slide about assumptions
it is not meant for sensitive content
this this this tool is meant for
the point of this tool is keeping public
content online it's not about you know
distributing sensitive content if you
need this kind of stuff again hidden
onion services like authorized hidden
onion services there's plenty of tools
for for for that kind of thing and it's
not meant for your
for any after login area of the website
so it's not meant to
keep your admin interface running it is
meant to keep your public site running
if like solutions for keeping the admin
interface running can be different there
you can have a special vpn or you know
all of these things and i'm happy to
talk about this uh you know after the
after the talk with with you if you if
you would like to to hear my my thoughts
about this uh but this specifically
focuses on the public side like a public
public content on your
uh
on your website uh and
splitting it this way also i feel has
security benefits right because if you
if you split it this way your public
site is public right but it has no way
of interfacing with the with the admin
uh interface that means that you know a
script kitty will not use a
wordpress bug to take over your site
right
but that's somewhat beside the point
okay
i mentioned same setup um
and and i will just go quickly through
this what this means to me as i
mentioned is limiting plugins and
complexity um
static site generators if it's something
that can work for you i would strongly
recommend this if you want your your
website to be you know uh
resilience to
reasonably high traffic caching and
micro caching i'm happy to talk about
this with with whoever wants to talk
about this after the after the talk
because that's a whole separate ball of
hairy things um
and and that's something i see in a lot
of websites that they us like they
configure their whatever wordpress or or
whatever cms they're running
they hard code the domain
right which means if you're a small news
organization somewhere in caucasus or or
or
or the balkans and you get blocked for
whatever reason
usually the easiest thing that comes to
your mind is oh we can just get a new
domain and
put our website on that domain right
send this to our
users oh we cannot because the cms
enforces the old domain
and now you have a bigger problem right
so thinking about this this is something
that i haven't noticed that many people
think about thinking about this when you
set up the website
is really important and just say you
know what i don't need to have the
domain hard-coded i don't i really
relative links are fine
right and that also means that if you
move to a different domain your website
will still work right which
yay
okay uh so
let's get to the interesting things when
the site goes down right we have a we
have you have a news website the the
website goes down let's say it's blocked
because
something
and
when this happens you are you have a
chicken and egg problem right let's say
you set up a separate domain your
website was you know sane
it works on the separate domain how do
you put this information out to the
users right the best way to inform your
visitors that there's a new domain would
be to use your website but your website
is down
it's kind of
difficult right so you can use social
media you can use all those things but
for a lot of users the default place
that they visit to get information from
your website or about your website is
your website so
chicken and egg
but we can try to fix this with service
workers anyone is familiar with service
workers
okay so service workers
uh are this uh is this web api that is
relatively new i would say five years
ish maybe in in
production state
and the idea is a website
uh sends a piece of code and tells the
browser when the visitor visits the
website hey from this point on this bit
of code
handles all of the requests that are
done in the context of this website all
of them right so all of the requests to
the domain and all of the requests that
in that originate from the loaded page
to any domain right
and this piece of code gets cached
and this piece of code the browser then
remembers
uh such that even if you close all the
tabs close the browser all of this
you
three weeks later you visit the site and
what happens is that this code is
brought up from the cache
handles your requests right what this
means is we can do
reasonably um interesting things because
yeah as i said once registered the
service worker kicks in the moment a
request is fired including before the
website is loaded as long as the service
worker had been loaded before right so
for anyone who had visited your site
once
this code is there it's already cached
it's going to run it's going to be there
for for a month or longer um and it will
handle all the requests right so this
allows us to you know obviously cache
the content in browser just say you know
if you pull this content cache it and
the next time the user loads this page
if the page is not working just show the
cached content but that's boring right
there plenty of people are doing that
already and that's kind of boring but
you can do what you can also do
uh is
you can pull the content from anywhere
else
this is your code you can just do fetch
requests anywhere else you can do
alternative endpoints meaning
your website is down a returning visitor
comes to your website right
service worker gets gets spun up and the
service worker says
uh
hold on the website is not is not
responding but i know that i can get
this content also from these
secondary domains so i'm just going to
pull this content from secondary domains
boom from the perspective of the user
the website just works it's maybe a
little bit slower because it has to
first figure out that the fetch request
to the original website doesn't work but
like okay half a second longer oh no
right
uh so this is this is uh what i would
have been working as a project called
lib resilient and maybe you can even see
the url there resilience.is
and
what it does is it it implements all of
the above right it implements the
service work it implements the plugins
for you know caching and pulling content
from random places
and
it has a configurable order of
operations uh which means we can do
something like this right we can say hey
once when you get a request for content
related to this website and coming from
the domain of this website please first
fetch to the from the original domain
right if that works great just cache
that content provide it to the user
we're done but if the if the fetch
doesn't work because the let's say the
backend domain the original domain is
down okay do we have it in cache maybe
we do great maybe we don't what do we do
we do we go to alternative end points
right we we say hey
okay fetch didn't work we didn't have a
cache
but i know that this content should be
available in these five different
endpoints so i'm going to just pull it
uh plum it from pub pilot from there
right and whichever succeeds first
the first successful remote fetch gets
cached and boom the user now has access
to this
uh content and again it just works the
the the visitor has no clue what was
happening
behind the scenes
and for example just just to throw it
out there possible alternative end
points you know way back machine right
if you if your website is on wayback
machine boom you have a alternative
endpoint for free
you can literally just fetch your
content from wayback machine great right
you can have
public folders on on major cloud
services they will hate you for this you
know one little trick to make cloud
services hate you
but it would work right you just fetch
from the public
public folder
uh and the user just
doesn't even have to think about this i
this is not my favorite way of doing
this but it is possible and of course
any https host uh you can push content
to really right so for example you could
push content to ipfs and fetch it from
ipss gateways
right boom
again you can rely on on infrastructure
of ipfs
to uh to fetch your content right
okay uh so
uh
multiple alternative endpoints can be
configured at the same time right so you
can have a configuration that says look
if the original domain is down you can
fetch it from here here here here or
here right and then a random every every
uh every request a random alternative
endpoint is is selected to pull content
from and several can be used
simultaneously so you can have an and
out of m situation of saying like i have
five configured try two of them randomly
just in case one of them will be down
right so you're uh you're making more
requests but you're also maximizing the
chance that even if one of the alternate
event points is down the user will still
get uh get the content
this is probably the question that you
have in your heads right now uh what
about like okay but those end points
have access to your content they can
modify this content they can be
malicious right oh no what do we do
about this uh sub resource integrity to
the rescue anyone here is familiar with
subresource integrity
okay so what subresource integrity does
is uh you have some kind of a resource
let's say a script that you're pulling
from let's say fastly because that's
what was made for it was made for those
large cdn's
and
the you you you use the link but you
also add the in the integrity hash so in
html is just like you know uh script you
know uh
ref uh blah blah blah and then integrity
equals there's a hash and the browser
what the browser does is it pulls the
content verifies the hash
before giving the content back to the to
the client side
right uh which means if you have the
hash of all the content
uh you don't have to care because if
somebody is maliciously modifying the
the stuff on the alternative endpoints
your browser will just say nope sorry
the hash doesn't match uh bye-bye right
but this again
so but in html we can only set integrity
attributes on script and link elements
thankfully uh in javascript we can set
integrity hashes on any request and
because uh because we're doing this in
in javascript because it's a service
worker blah blah blah all of this we can
set integrity hashes on every request so
i tested this with video i tested this
with images i tested this with all sorts
of content and the browser just happily
says okay i'm pulling some content
hash match is great here you are or hash
doesn't matter well screw off right
and yes there's a there's already a
plugin for this in in in liv resilience
so that that's already implemented but
then
that's not that easy right but then how
can you distribute integrity hashes
safely without having to trust
alternative endpoint operators right
because you have the the the service
worker has to get those hashes somehow
it can either have them pre-configured
which is boring because now you cannot
push new content or it can have you can
pull them for example from those
alternative endpoints but we don't trust
those alternative endpoints that is the
whole point of distributing those hashes
what do we do what do we do asymmetric
crypto um right we can
another plugin already implemented
verifying uh fetched content using
signed integrity data right so what
happens is
initial setup of your website you
generate private and public key pair on
your server side
you configure the public the public key
in live resilience config and you use
the signed integrity plugin and the sign
integrity plugin during publishing what
you do is you publish you generate the
integrity hash of every piece of content
image whatever you're publishing
you put it in a java web token
magic magic magic uh
signed with the private key generated
before and you put the jwt
in a file available under whatever the
uri of the original content is dot
integrity right and this is what this is
what this plugin expects when it's
working in the service worker on the
client side
when it's fetching content let's say
it's fetching
favicon.ico right what it will do first
it will fetch favicon dot ico dot
integrity verify the signature get the
hash out of it
verify pull the pull the five icon dot
ico verify the hash boom uh it works or
or it doesn't work right so what this
means is we have a we can have content
delivery even or with the original
website is down thanks to service
workers
uh we can verify the fetched content uh
has not been tampered with thanks thanks
to suppressors integrity and the signed
integrity plugin and it all works on
regular browsers no special settings
necessary if you are using any of the
you know
modern browsers
all of this already works all the all
the plumbing is already there right
so what we can have exactly this imagine
10 organizations that say okay we're
going to deploy the brazilian on all our
websites and we're going to serve as
alternative endpoints for each other
right
you have a community cdn where no new
infrastructure needs to be deployed the
only cost is
uh is a storage space right because each
of those websites has to be mirrored on
each of those the organization's
infrastructures that's that's the only
thing
uh the the bandwidth costs kick in only
uh when one of the websites is down
right because with this config it's like
does the website work it works here's
your content if it doesn't work well
alternative endpoints right other orgs
infrastructures pooling right
you don't have to trust them that much
right because you can you you are
pushing
the content along with the integrity
files so the service worker will verify
this right so you don't even have to
trust those organizations like
to not modify your content you only have
to trust them in the sense that uh they
will not maliciously screw screw you up
in the sense of like deleting content or
anything like that but if it's a group
of organizations doing similar things
perhaps that's not an entirely
unreasonable assumption
and it is completely transparent for
visitors right so everything i promised
there you go on this black screen that
has nothing on it
so yeah a group of organizations running
its own their own hosting infrastructure
serving as alternative endpoints for for
one another
i think i have about five minutes right
now
so and i have i think three slides
this is doable uh not mentioned here uh
configuration changes during downtime
right let's say your website is down and
you decided ah you i have to change
alternative endpoints some of those
organizations also went down or now
don't want to don't want to deal with me
i set up new alternative endpoints what
do i do how do i tell the users who have
already loaded the service worker uh
that there are new alternative endpoints
well if at least one alternative
endpoint already configured works you
just push a config update
boom and this goes through the same
plumbing as any other request because
it's just config.json file so
config.json.config.json.integrity
boom any user who has
visited your website before has the
service worker loaded and
as long as at least one of the alternate
endpoints works already
pulls in the update uh and and boom has
access to the new alternative endpoints
or the new uh config
i have not talked about deployment and
publishing pipeline uh because that
depends very much on the setup of each
website if you're using a static site
there is going to be a bus script a make
file a gitlab ci cd pipeline or
something like that that pushes content
to your site well we can just add some
steps that pushes this content to ipfs
or your friendly organizations or your
whatever google drive and uh you know at
the same time and and calculates the
integrity files uh along along with that
there is a faq can you read the link
there there's going to be a more visible
link
at the end
current status of the resilient code
exists works and has
decent code code test coverage um uh all
of the plugins that uh that i was
talking about today have 90 or more uh
test coverage so uh yay
documentation largely exists but
definitely needs improvements
if somebody wants to read through this
and tell me oh no i don't understand how
this works this is weird then i'm very
happy to hear that and improve because
when i write this documentation i'm all
in my head i understand all of this i
don't know which things might be
completely weird or or surprising
this has not yet been deployed in
production on any large site but i have
i know that i know of two reasonably
large projects that are testing it and
might might deploy it at some point but
testing improvements ideas criticism all
of this is very welcome please you know
come at me
and the project got a small grant from
nlnet which i highly recommend those
guys are also at mch and you should find
them somewhere there
uh somewhere there sorry uh and they
have more money for interesting projects
so you also should you know try uh try
uh try uh with your project if you have
a project
possible next steps uh wordpress plugin
because why would wordpress not why
should wordpress not be able to uh to
push
stuff you know along with integrity
files and all of this to some places uh
that makes sense uh reverse proxies can
be alternative endpoints i haven't used
them i prefer the static approach i
prefer the approach of here's content
files because this decouples the
alternative endpoints from your backend
server uh meaning if you're using
reverse proxies if your backend server
is down your reverse proxies are
probably also done or unless they do
some interesting caching right but this
is totally doable and totally crazy
ideas and this is almost the last slide
uh why not use ipns and ipfs as content
transfer directly in the browser well
there's a bug with ipns and i could i
could rant about this over beer uh
because it hasn't been fixed for three
years uh but once they fix this bug we
might be able to just use ipns ipfs
directly without hitting uh
ipfs gateways as
alternate event points
we could use i want to test web torrent
as content the content transport again
not alternative endpoints just a
completely alternative transport uh
plugin that just pulls stuff from from
the cloud
and merge requests are welcome and other
non-standard decentralized weird uh
fascinating transport plugins i'm all
ears if anybody wants to talk to me
about this and and figure out things to
do together and the website is
resilient.is there's a blog there's
documentation there's code it's very
simple website uh thank you questions
woof i made it wow
[Applause]
you still had
you still had you still had one minute
awesome oh i'm sorry
i could have spoken that tiny bit slower
then yes
but understandable all right we have
questions microphone in the front please
um any ideas about first-time visitors
like how to solve this problem for
first-time visitors no
no but
again from my experience of running
these kinds of websites
most of the visitors are first time are
are returning visitors usually right and
uh and so i
i found a way to solve this problem i
haven't found the way of solving the the
first visitors problem because you have
to load this code somehow right uh i
would love to to have a way of um okay
so let's say you have a static website
let's say you have static website with
relative links that means you can just
zip it
you can literally just distribute
zips on on on uh thumb drives on the
sneaker net right i would love to have a
way of distributing this code with the
zip and saying hey if you're if you're
if you receive this zip to the zip file
to
experience this website click this and
now you can go online and it will just
pull stuff but that's not how this works
unfortunately service workers can only
be installed either from localhost or
from https endpoints and and so if i
find a way to
you know go around this uh such that i
can install a service worker in a user's
browser from a zip file then
awesome right but yeah that's that's a
very very valid question
so this will also break if we finally
teach people to clear the browser
and browser profiles i think we don't
have to worry about that i don't think
they will ever learn
but yes uh this is this also used to not
work in firefox private mode uh or
incognito mode or whatever they call it
this week
but
but uh i think they they enabled it
right so yes there will be browsers and
there will be configurations uh where
this will not work for users
i usually use my most of my browsers
with javascript completely disabled so
that would not work for me but also
people who have javascript mostly
disabled also probably have tor so yes
onion tour sites on your like hidden
services please
yes
first thanks for the talks
and i didn't get one things the idea is
that
a group of organizations
uh stay together and install and
configure libra resilient
to uh and so to have kind of many island
where
many different group organizations can
pick up each other
so yes so each website let's say you
have 10 websites right each website has
live resilient configured and has okay
this is my main site but all of the
other uh
website like
infrastructure of all the other
organizations clear yeah
the question is uh do the organization
have to find each other
uh somewhere i mean if i want to
install
libre resilient how can i find some
other organization that want to rare
with me so that's that's uh
so
live resilient itself uh is just install
it on your uh on your website and you
have to figure out where your
alternative endpoints are and where
you're pushing your code and all of this
right this is up to the website admin to
figure out what they can rely on as far
as the alternative endpoints are
concerned right
but what i what i realized after i wrote
most of this this code is okay but if we
have a group of organizations they can
rely on each other right they can they
can pull their resources together using
live resilient in a way that i don't
think was possible before or i have not
seen
this kind of this kind of resource
pooling which does not require either a
separate entity or or some kind of tls
private keys sharing situation or or
anything like that right so that's
that's the i think the the innovative
part of of the talk right but yes for
for lip resilient itself you just have
to figure out your alternate points
yourself
i'm going to be a bit anti-http because
i think it's tends to reinvent wheels
all the time most other protocols use
srv records for this purpose
and i know the http workgroup in the
ietf is working on a different record
specifically for http which also allows
you to prioritize where you come from
and even segments of your website can be
uh separately redirected
so that there will be a general solution
that might even be
uh might even end up in browsers
inshallah uh but it's not there yet uh
there are things like out and you've
seen defined sv records
yeah yeah
but the browsers will have to read them
and and and
apply them right
and it will still have to
be specified such that it works kind of
like hsts which is like these are the
alternative endpoints uh
cache this information for the next
whatever
and also this solution uh those headers
you will not be able uh to update the
configuration on the visitor browser uh
unless your website is up
right because you're not getting those
headers as far as i understand
uh your dns infrastructure needs to be
open that's right your dns
infrastructure needs to be open
yeah yeah but uh what i've
sorry yes you're right but what i've
what i've seen is something called alt
svc
uh i can't remember what the acronym is
for and that's an http header uh that
specifies alternative endpoints kind of
sort of sort of thing
uh
and and this could potentially be a
solution like like this but again you
would not be able to update the visitors
uh
config
when your website is down right with
with the dns i agree right but also with
the dns if you're
if your website is blocked then dns is
probably blocked right and this doesn't
rely on dns right because you've loaded
the service worker the service worker
has all the information it needs uh
already right
okay
uh any more questions
wow clearly a boring talk
uh so there's another problem uh if one
of the organizations in the circle gets
compromised suddenly you have one
organization that can push like militia
malicious content
to
that gets hosted by everyone else no it
cannot well it can cause it can push
this content uh yes right but i would
imagine that if you're running an
organization that is part of this pool
you would have a domain for your own
stuff websites etc and you would have a
separate domain
uh for the for the alternate event point
stuff right
in this in this pool right so
of course if i were running
infrastructure of one of those
organizations i would separate those
things very well right because i don't
know what's going to get pushed into
this right but from the perspective of a
of a website operator who's relying on
those alternative endpoints the
subresource integrity and signed
integrity just solve this problem
because if somebody pushes the
you know modified malicious whatever
code to their alternative endpoint that
you're going to use
it will they will not be able to sign
the integrity package right so so
the service workers just say oh that was
some kind of a bug it doesn't matter
yeah but there are some types of content
that gets uh you can get a website down
uh like uh police raid just uh by the
presence of the fire oh yeah but but
that's why that's why i use the word
community right that you have to have a
community of organizations and then
you you have to trust each other a
little bit right it's not a completely
trustless
and i will save you now yay
so please um as we are at the end of the
time for this talk please please give
our speaker another very
cool round of applause
thank you thank you
i have stickers if anybody wants
stickers i have stickers
you