<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Peergos - posts</title>
    <link href="https://peergos.org/" rel="alternate" type="text/html"/>
    <link href="https://peergos.org/feeds/posts.atom.xml" rel="self" type="application/atom+xml"/>
    <id>https://peergos.org/</id>
    <updated>2025-12-27T00:00:00Z</updated>
    <author>
        <name>Peergos team</name>
    </author>
    <entry>
        <title>2025 - What a year!</title>
        <link href="https://peergos.org/posts/2025" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/2025</id>
        <published>2025-12-27T00:00:00Z</published>
        <updated>2025-12-27T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;What a year.&lt;/p&gt;
&lt;p&gt;In 2025, we shipped 20 releases, more than double last year&apos;s 8 all with substantial features and fixes. We did this with an extremely small &lt;a href=&quot;/about#team_&quot;&gt;team&lt;/a&gt; and along the way we tripled our number of paying customers.&lt;/p&gt;
&lt;p&gt;We don&apos;t have investors. We don&apos;t take Venture Capital. Peergos is a non-profit funded directly by the people who use it, customers and donations, which keeps us focused on building what users actually need. If you value a privacy-first, lock-in-free humane web, you can support our work by &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;creating an account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Version 1.0 and Major features&lt;/b&gt;&lt;br/&gt;
This year marked a major milestone: Peergos 1.0&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Alongside it, we shipped:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Native desktop apps (Windows, macOS, Linux)&lt;/li&gt;
&lt;li&gt;A full-featured Android app&lt;/li&gt;
&lt;li&gt;A high-performance sync engine&lt;/li&gt;
&lt;li&gt;Post-quantum secure sharing&lt;/li&gt;
&lt;li&gt;Easy server migration&lt;/li&gt;
&lt;li&gt;Massive performance improvements across the filesystem and p2p stack&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let&apos;s hear more about each of these.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Sync: Fast, secure and bandwidth-efficient&lt;/b&gt;&lt;br/&gt;
Our biggest new feature this year was the sync engine, now available in the desktop and Android apps. It lets you:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Keep a local folder fully in sync with a folder in Peergos&lt;/li&gt;
&lt;li&gt;Sync multiple devices to the same remote folder&lt;/li&gt;
&lt;li&gt;Choose whether deletes propagate (turning sync into a backup)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is efficient, so that if you have a big file synced and you modify a small section of it then it will only upload the modified chunk(s). To enable this and reduce bandwidth required in other situations we added some new encrypted metadata to files - a tree hash. For now this is a custom tree hash based on &lt;a href=&quot;https://en.wikipedia.org/wiki/SHA-2&quot;&gt;sha256&lt;/a&gt;, in the future we will switch to &lt;a href=&quot;https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE3&quot;&gt;blake3&lt;/a&gt; once browser support is better. This tree hash allows us to efficiently determine if a local and remote file are the same and also to detect which chunks changed between two versions of a file.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;full-width&quot; src=&quot;/theme/img/blog/sync.png&quot;/&gt;
&lt;b&gt;Security by design&lt;/b&gt;&lt;br/&gt;
The sync engine operates on a write capability limited to the synced folder. Even if a device is compromised, no other Peergos data is exposed.&lt;/p&gt;
&lt;p&gt;On Android, sync runs without the dangerous MANAGE_EXTERNAL_STORAGE permission. Instead, we use the modern Storage Access Framework, giving users fine-grained control without sacrificing full bi-directional sync of any file type.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Native Desktop apps (no Java required)&lt;/b&gt;&lt;br/&gt;
We released native installers for Windows, macOS and Linux:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://peergos.org/download&quot;&gt;https://peergos.org/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This removes the need for Java and enables deeper system integration, including sync. It also improves the threat model: a compromised server cannot deliver a compromised client unlike a web app.&lt;/p&gt;
&lt;p&gt;Each platform had its own challenges: Windows CLI needing a separate binary, MacOS signing and notarization, Linux portability, but the result is a cleaner, safer and more capable desktop experience.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Android&lt;/b&gt;&lt;br/&gt;
The Android app has been our most popular addition. You can &lt;a href=&quot;https://peergos.org/download#android&quot;&gt;install it&lt;/a&gt; from Google play or side-loading. It supports the full user interface plus bi-directional sync. Next year we&apos;ll be integrating it with the native Android filesystem allowing you to send files directly between Peergos and other apps.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Post quantum&lt;/b&gt;&lt;br/&gt;
We&apos;ve upgraded sharing in Peergos to use a hybrid key-exchange based on Curve25519 and &lt;a href=&quot;https://en.wikipedia.org/wiki/Kyber&quot;&gt;MLKEM-1024&lt;/a&gt;. This means that anything you share in Peergos is safe against a &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvest_now%2C_decrypt_later&quot;&gt;&lt;em&gt;harvest now, decrypt later&lt;/em&gt;&lt;/a&gt; attack from a future large-scale quantum computer.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;50-150x Faster folder loading&lt;/b&gt;&lt;br/&gt;
Previously, loading a folder in Peergos required listing all the child capabilities and then retrieving the metadata for each child before anything could be shown in the UI. We introduced a bulk champ.get call which allows us to retrieve up to 20 children in a single request. Then we added more metadata to the directory entries, specifically the mimetype, creation date and whether it is a directory. This means we can populate the UI as soon as we have listed the capabilities and update it with thumbnails and modification times asynchronously in the background. This last change made the UI about 100x faster on high latency connections. Now we can load a folder with 25,000 children from a server on another continent in 29s.&lt;/p&gt;
&lt;p&gt;We can still improve this further in the future by parallelising listing the directory capabilities, which currently need (number of children)/500 requests in series. By using the same &lt;a href=&quot;/posts/fast-seeking&quot;&gt;&amp;quot;stream-secret&amp;quot; technique&lt;/a&gt; we use to enable zero I/O seeking within huge files we can make all those requests in parallel and thus only a single roundtrip to the server, regardless of directory size.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Towards a CRDT&lt;/b&gt;&lt;br/&gt;
We now have automatic concurrent modification handling in most circumstances. Previously, if you uploaded a file whilst editing a totally unrelated file, then saving the changes would result in a concurrent modification exception from the server. Now we handle these automatically if there isn&apos;t a genuine conflict, i.e. a concurrent change to the same file or dir. In the future we will also handle non conflicting changes to the same dir. The plan for files is to support &lt;a href=&quot;https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type&quot;&gt;CRDT&lt;/a&gt; formats like &lt;a href=&quot;https://automerge.org/&quot;&gt;automerge&lt;/a&gt; which can automatically merge in concurrent changes.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Shared page&lt;/b&gt;&lt;br/&gt;
There is a new shared page available in the left sidebar which shows all the things you have shared with others, making permissions and visibility much easier to manage.
&lt;img class=&quot;full-width&quot; src=&quot;/theme/img/blog/shared-page.png&quot;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Built-in migration and mirroring support&lt;/b&gt;&lt;br/&gt;
Peergos was designed from day one to avoid lock-in.&lt;/p&gt;
&lt;p&gt;Your identity, data and social graph are portable.&lt;/p&gt;
&lt;p&gt;This year we made it incredibly easy to mirror your data on another server or migrate to it. With a few clicks you can request or pay for space on another server to start mirroring your data or completely migrate there.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Quic&lt;/b&gt;&lt;br/&gt;
As part of a grant early in the year, we implemented the &lt;a href=&quot;https://en.wikipedia.org/wiki/QUIC&quot;&gt;quic&lt;/a&gt; secure transport upstream in jvm-libp2p. This is now enabled in Peergos and improves reachability of nodes and also resolution and speed of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Distributed_hash_table&quot;&gt;DHT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;P2P improvements&lt;/b&gt;&lt;br/&gt;
We fixed some bugs in the p2p http request implementation which makes them much more reliable now. We have also removed all usage of &lt;a href=&quot;https://docs.ipfs.tech/concepts/bitswap/&quot;&gt;bitswap&lt;/a&gt; for retrieving blocks - we just use a standard p2p http request.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Server-side scalability&lt;/b&gt;&lt;br/&gt;
We&apos;ve done a lot of work on speed and scalability of garbage collection on large blockstores. Now a garbage collection on a 10 TiB remote S3 blockstore can run in under an hour. We are currently working on another huge speed up to this by segregating the blockstore by user.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The rest&lt;/b&gt;&lt;br/&gt;
We&apos;ve added translation for French, Spanish and Polish. There have also been lots of fixes, new mimetype support and CLI improvements.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Looking ahead&lt;/b&gt;&lt;br/&gt;
2025 was about native apps, ecurity and performance.&lt;/p&gt;
&lt;p&gt;2026 will be about polish, usability, iOS and deeper OS integration, while staying true to our principles: privacy, portability and user control.&lt;/p&gt;
&lt;p&gt;If that resonates with you, &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;create an account&lt;/a&gt; or &lt;a href=&quot;https://donorbox.org/peergos&quot;&gt;support our work&lt;/a&gt; and help shape what comes next.&lt;/p&gt;
&lt;p&gt;Here’s to an even better 2026.&lt;/p&gt;
&lt;hr /&gt;</content>
    </entry>
    <entry>
        <title>Decentralization Matters</title>
        <link href="https://peergos.org/posts/decentralization" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/decentralization</id>
        <published>2025-07-14T00:00:00+01:00</published>
        <updated>2025-07-14T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Have you ever invested time and energy into using a digital service and noticed that it gets worse as time goes on? Maybe the provider added some useless AI integration or started feeding all your data into an AI against your will. Maybe they &lt;a href=&quot;https://www.tomsguide.com/computing/mobile-apps/ads-are-coming-to-whatsapp-heres-where-youll-see-them-and-where-you-wont&quot;&gt;introduced ads&lt;/a&gt; or made it worse some other way. You&apos;re not alone in these experiences - in tech, the process is ubiquitous, and gained the name &lt;a href=&quot;https://en.wikipedia.org/wiki/Enshittification&quot;&gt;enshittification&lt;/a&gt;. It is an example of companies acting against the interests of their users.&lt;/p&gt;
&lt;p&gt;End-to-end encryption (E2EE) helps with some of these problems, but leaves others unsolved. E2EE is designed to protect you from the service reading your content, but that is not the only threat people need protection from. The real issue isn’t just privacy - it’s power. Who controls your digital life?&lt;/p&gt;
&lt;p&gt;Most tech companies turn bad eventually. This can happen in many ways, but it always eventually happens if the right balancing incentives are not in place. They can be sold to private equity, their investors can demand an exit or push for growth at all costs. The company could be infiltrated by intelligence services. They can simply grow too big and &lt;a href=&quot;https://en.wikipedia.org/wiki/Don%27t_be_evil&quot;&gt;turn evil&lt;/a&gt;, or the markets could change, leaving the company bankrupt. Or perhaps more than one of these at once! The question isn&apos;t &lt;em&gt;if&lt;/em&gt; a company will betray you, but &lt;em&gt;when&lt;/em&gt; - and, most importantly, &lt;strong&gt;what can you do about it&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;digital-feudalism-vs-digital-citizenship&quot;&gt;Digital feudalism vs digital citizenship&lt;/h2&gt;
&lt;p&gt;The problem lies at the core design of the service. If it is centralized (i.e., there is only one provider), then your choices are either to stop using the service entirely, or to put up and shut up; naturally, neither of these are good options. If you cannot easily switch provider of a service then you are locked in. When you are locked-in, you are vulnerable to the following consequences:
- Arbitrary price hikes
- Holding data hostage
- Adding ads
- Arbitrary censorship, account bans
- Risk of inserting a backdoor (may be forced by a government)&lt;/p&gt;
&lt;p&gt;A centralised service is, by construction, a single point of failure, or an infrastructure choke point where control can be exerted.&lt;/p&gt;
&lt;p&gt;In contrast, a decentralized service has multiple independent providers, giving users the choice to switch. And if the switching costs aren&apos;t too high, clients are likely to move if they are dissatisfied with the service, giving them a way out. More than that, the mere fact that users &lt;em&gt;can&lt;/em&gt; switch keeps the original provider honest and more aligned with their interests.&lt;/p&gt;
&lt;h2 id=&quot;the-solution-fix-the-incentives&quot;&gt;The solution: Fix the incentives&lt;/h2&gt;
&lt;p&gt;Being able to switch provider presupposes that there is more than one provider. This means centralized services controlled by a single company are bad for you, your personal sovereignty and digital resilience. If you choose services that have the following properties, then you are protected against the provider turning malicious now or in the future, and the incentives are likely to keep them good.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;End-to-end encryption&lt;/strong&gt;
This protects you against misuse or exposure of your data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open source servers&lt;/strong&gt; (not just clients) &lt;br/&gt;
The most important component is open source servers. This means that even if the company disappears, another can spring up to run a compatible service. Many companies, particularly ones with end-to-end encrypted services, try to skirt around this by open sourcing only their clients, not their servers. Don&apos;t be fooled by this. Open source clients do not help you to switch providers. True freedom means anyone can run a compatible service.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Portable identity&lt;/strong&gt; &lt;br/&gt;
Your identity should belong to you, not your current provider. Portable identity means you can keep your identity if you switch provider. One example of this is mobile phone numbers, which you can keep if you switch phone company. This is important because it means you can switch provider without needing to tell all your friends about your new identity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Portable data&lt;/strong&gt; &lt;br/&gt;
Most services use location-based addressing for data. This means something like a URL that points to a file, e.g. https://drive.google.com/myuser/myfile. By if I move my account and data to a different provider then those links do not work any more, especially so if the company ceases to exist. Portable data means data is not addressed by its location. This means that if you switch providers all existing access continues to work. The best way to achieve this is with content-addressed data, where data is addressed by its cryptographic hash. In this case, you can get the data from anywhere, and automatically verify that it hasn&apos;t been tampered with.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Companies without investors&lt;/strong&gt; &lt;br/&gt;
If you don&apos;t have investors, then they can&apos;t sell you out. Venture capital investment in particular is famous for selling out users. The problem is that the users are not the customer, the investors are. So the company does it&apos;s best to keep the investors happy, which involves growing as fast as possible, trapping users and then exploiting them for profit to maximise returns to investors. Relatedly, check if the company has a viable business model. Are they charging customers, or are they burning investor money and giving it away for free. A good example of a company without investors is a non profit.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multiple implementations - a standard specification&lt;/strong&gt; &lt;br/&gt;
If you have a specification for the product that has multiple open source implementations then this is the best defence. In this case, the software development, as well as the providers, are decentralised.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Centralized services are digital feudalism. If you care about long-term freedom, avoid centralized, proprietary platforms. Choose systems that put you in control. Don&apos;t be a subject in a digital fiefdom, be a &lt;strong&gt;sovereign digital citizen&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;</content>
    </entry>
    <entry>
        <title>Security audit 2024</title>
        <link href="https://peergos.org/posts/security-audit-2024" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/security-audit-2024</id>
        <published>2024-11-18T00:00:00Z</published>
        <updated>2024-11-18T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Thanks to some generous support from &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet&lt;/a&gt; we have had our 2nd security audit. This was done by &lt;a href=&quot;https://www.radicallyopensecurity.com&quot;&gt;Radically Open Security&lt;/a&gt;. We are very pleased to say that 0 extreme, high or elevated risk vulnerabilities were found. There were 2 moderate, and 6 low risk issues found, and all of these are fixed now. None of the issues resulted in data exposure, exfiltration or integrity compromise - most resulted in web interface crashes. It was a pleasure working with Radically Open Security and we highly recommend them.&lt;/p&gt;
&lt;p&gt;As part of our open approach to security and privacy we believe that audits should be published in full and made public. Read the final report &lt;a href=&quot;https://raw.githubusercontent.com/Peergos/Peergos/refs/heads/master/audits/Peergos%20penetration%20test%20report%202024%201.0.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Reasons to prefer blake3 over sha256</title>
        <link href="https://peergos.org/posts/blake3" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/blake3</id>
        <published>2023-05-09T00:00:00+01:00</published>
        <updated>2023-05-09T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;This post is a copy of &lt;a href=&quot;https://twitter.com/zooko/status/1652743779932045313&quot;&gt;tweets&lt;/a&gt; by &lt;a href=&quot;https://en.wikipedia.org/wiki/Zooko_Wilcox-O%27Hearn&quot;&gt;Zooko Wilcox-O&apos;Hearn&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;SHA256 was designed by the NSA. BLAKE (the original) and BLAKE3 were designed by Jean-Philippe Aumasson and others (including me, but Jean-Philippe and the other contributors did a lot more of the cryptographic heavy lifting than I did).&lt;/p&gt;
&lt;p&gt;SHA256 was based on SHA1 (which is weak). BLAKE was based on ChaCha20, which was based on Salsa20 (which are both strong).&lt;/p&gt;
&lt;p&gt;NIST/NSA have repeatedly signaled lack of confidence in SHA256: first by hastily organising the SHA3 contest in the aftermath of Wang&apos;s break of SHA1, then by making &amp;quot;Don&apos;t be like SHA256&amp;quot; a goal for the algorithms of that contest, and then by banning SHA256 from new designs to be used by the USA government (except for in one specific cryptosystem that protects from weaknesses in the hash function &lt;a href=&quot;https://media.defense.gov/2022/Sep/07/2003071836/-1/-1/0/CSI_CNSA_2.0_FAQ_.PDF&quot;&gt;https://media.defense.gov/2022/Sep/07/2003071836/-1/-1/0/CSI_CNSA_2.0_FAQ_.PDF&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;BLAKE (the original) was very well-studied during the SHA3 competition. In NIST&apos;s final report on the SHA3 process, they stated that the depth of scientific analysis applied to BLAKE exceeded even that applied to Keccak (the final SHA3 winner).&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;full-width&quot; src=&quot;/theme/img/blog/blake3-analysis.jpeg&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Known, feasible attacks can break 31 out of 64 rounds of SHA256 (48% of the rounds). Known, feasible attacks can break only 2 out of 7 rounds of BLAKE3 (29% of the rounds).&lt;/p&gt;
&lt;p&gt;BLAKE3 comes “out of the box” with security features that can protect users in common use cases, such as protection against length-extension attack, a standard method of keying, &amp;quot;personalization tags&amp;quot; to guarantee domain separation, etc.&lt;/p&gt;
&lt;p&gt;BLAKE3 is &lt;em&gt;much&lt;/em&gt; more efficient (in time and energy) than SHA256, like 14 &lt;em&gt;times&lt;/em&gt; as efficient in typical use cases on typical platforms.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;full-width&quot; src=&quot;/theme/img/blog/blake3-performance.jpeg&quot;/&gt;&lt;/p&gt;
&lt;p&gt;BLAKE3 also offers performance that is competitive against SHA256 in a lot of different use cases and platforms, including some that might surprise you, such as sometimes being more efficient than SHA256 &lt;em&gt;even&lt;/em&gt; when your CPU comes with SHA256 acceleration circuits built into it!&lt;/p&gt;
&lt;p&gt;BLAKE3 is highly parallelizable. This provides two performance advantages, only the first of which most people think about.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The first is big data + big multicore: if the size of your data inputs scale up 100X but the number of CPU cores in your platform also scale up 100X, BLAKE3 takes only a little longer, but SHA256 takes approximately 100X times as long.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The other advantage, less widely understood, is that inside a single compute device, new tech improvements provide more and more parallel power. This is true in FPGAs and GPUs, and it is true in CPUs because of vectorization upgrades.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AVX in Intel/AMD, Neon and Scalable Vector Extensions in Arm, and RISC-V Vector computing in RISC-V. BLAKE3 can take advantage of all of it.&lt;/p&gt;
&lt;p&gt;When you upgrade to a newer CPU/platform/device, BLAKE3 typically &lt;em&gt;further extends&lt;/em&gt; its performance advantage over SHA256 compared to the performance advantage it already had on the previous platform!&lt;/p&gt;
&lt;p&gt;Finally, BLAKE3 was designed and implemented by both cryptographers &lt;em&gt;and&lt;/em&gt; software engineers. The reference implementations are super efficient and well-engineered for security, thanks to Jack O&apos;Connor, Samuel Neves, and Jean-Philippe Aumasson: &lt;a href=&quot;https://github.com/BLAKE3-team/BLAKE3&quot;&gt;https://github.com/BLAKE3-team/BLAKE3&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;End of quote. You can follow our progress on upgrading to blake3 &lt;a href=&quot;https://github.com/Peergos/Peergos/issues/1045&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>A better web</title>
        <link href="https://peergos.org/posts/a-better-web" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/a-better-web</id>
        <published>2022-08-02T00:00:00+01:00</published>
        <updated>2022-08-02T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;The web as it is today is, by design, ridden with hostility. The problems faced by its users fall into three main categories: ownership of identity, ownership of data, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Surveillance_capitalism&quot;&gt;surveillance capitalism&lt;/a&gt;. Websites want to own the identity of their users. This results in compromising either the convenience by having to log in to every site separately – or security and privacy, by outsourcing identity control to other third-party sites (“Would you like to log in with your Google or Facebook account?”), thus disclosing movements throughout the internet.&lt;/p&gt;
&lt;p&gt;Websites also want to own their users&apos; data. This means they can lock users out from their own data (or delete it) with little or no recourse. There are many &lt;a href=&quot;https://duckduckgo.com/?q=Google+deleted+my+data+TOS+violation&quot;&gt;examples&lt;/a&gt; of people losing their accounts or data in Dropbox or Google because an AI got a false positive. It also means users are forced into the provider’s interface for viewing data. Anyone who has ever been upset at a website&apos;s redesign knows this problem (e.g. see the recent outcry because of Instagram changing their interface trying to be more like Tiktok).&lt;/p&gt;
&lt;p&gt;Big tech are hell-bent on maximising their profits at all costs - be it personal or societal. Every part of any major website is highly optimised to keep users engaged. This is the direct result of business models that compel companies to exploit their users like a resource: surveil them to serve them targeted ads, and manipulate them to spend more and more time on a website (to see more ads). There are many examples of this, quite frankly, abusive design deliberately manipulating users. Take the notification emails saying, &amp;quot;You&apos;ve got a new message on our site, come login to see it!&amp;quot;, when the message itself could have just been included in the email. Or the habit-forming “infinite scroll” in user feeds that tricks them into never leaving. Technology should be a useful tool, not an addictive drug that prevents consumers from doing anything else.&lt;/p&gt;
&lt;p&gt;Apart from the above problems for users on the web, there are problems for creators as well. Creating a web app requires managing a server, arranging a domain name and TLS certificates, and perhaps running a database and handling data export and deletion requests. What if someone just wants to make some content and share it? Or maybe control access to their content so they can charge for it as well? The only viable option right now is to post to one of the big oppressive platforms like YouTube or Twitter.&lt;/p&gt;
&lt;p&gt;The current web architecture looks like this:
&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/current-web.png&quot; alt=&quot;current web&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;100%&quot; /&gt;
&lt;br/&gt;
The current web&apos;s architecture, where each website controls your identity and owns your data.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;A better architecture for users would let people own their identity and data and selectively grant web apps access to these. This is illustrated below:
&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/better-web.png&quot; alt=&quot;ideal web&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;100%&quot; /&gt;
&lt;br/&gt;
A better web architecture empowering users to own their identity and data and grant apps access to parts of it.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;This architecture is exactly what we&apos;ve created in Peergos. User identity is controlled by users themselves, not by their home servers, or the Peergos network. Users own their data, since it is all stored in their personal datastore, fully encrypted. Users decide who can see what.&lt;/p&gt;
&lt;p&gt;We have an application sandbox to run custom apps. How does it work? An app in Peergos is basically just a folder of HTML5 assets. The sandbox locks down the app totally, so it can&apos;t steal private data. The idea is that even running a malicious app and granting it read-access to private data is still perfectly safe. Because an app is just a folder, access to it can be controlled – just like anything else in Peergos. Charging users for an app? Not a problem! Additionally, the app sandbox also prevents the app from communicating with its author without user consent, making tracking impossible by design. We want to isolate apps from each other, and from the main Peergos page. The architecture looks like this:&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/app-sandbox.jpg&quot; alt=&quot;app sandbox&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;100%&quot; /&gt;
&lt;br/&gt;
App sandbox
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Each app is loaded on a unique subdomain (a hash of the Peergos path of the app code). The sandbox runs in a separate operating system process with the use of COOP and COEP headers, and CSP is used to lock down the sandbox so it can&apos;t talk to the external web. The server returns the same static assets for all subdomains. These assets simply set up a service worker, and load the app in an iframe. The service worker intercepts requests from the app for assets or API calls, and send them via post messages to the parent Peergos context, where they can be checked against any permissions the app has been granted before answering.&lt;/p&gt;
&lt;p&gt;One of the permissions that the app can be granted is the ability to store data in a folder within Peergos. This data is owned and controlled by the user, since it is in their private drive. Other permissions include reading a file or folder, reading and modifying a file, registering to open certain kinds of files, sending messages to selected friends, and much more. We have some demo apps written &lt;a href=&quot;https://github.com/Peergos/example-apps&quot;&gt;here&lt;/a&gt; that include:&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/app-image-editor.png&quot; alt=&quot;image  editor&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;80%&quot; /&gt;
&lt;br/&gt;
Image editor
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/app-winamp.png&quot; alt=&quot;winamp clone&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;80%&quot; /&gt;
&lt;br/&gt;
Winamp clone
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/app-tiddlywiki.webp&quot; alt=&quot;tiddly wiki&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;80%&quot; /&gt;
&lt;br/&gt;
TiddlyWiki 5 - a non-linear personal web notebook
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We also used the sandbox to implement a web browser for private websites in Peergos. Any Peergos folder of HTML assets can be viewed in this browser, and different sites are isolated from each other in the same way different apps are. Different websites can be linked via their Peergos path, and anyone who has access to those files can follow the links. During this process, the Peergos server doesn&apos;t see any paths or assets. All requests are handled locally just as for other Peergos files.&lt;/p&gt;
&lt;p&gt;Such a private web is super cool because not only is third-party tracking impossible because of the sandbox, but even first-party tracking can be prevented, depending on how Peergos is run. This is how the web should be, protecting end users, not exploiting them. The inventor and futurist Buckminster Fuller once said,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Markdown browser</title>
        <link href="https://peergos.org/posts/markdown-browser" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/markdown-browser</id>
        <published>2022-04-08T00:00:00+01:00</published>
        <updated>2022-04-08T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;We&apos;ve just released a super cool new feature - a browser for markdown documents within Peergos. This means you can nicely render markdown documents in Peergos, including inline images also in Peergos. You can link to other markdown files and browse back and forth between them. You can link to other files like PDFs, todo boards, or calendar events and have them open in the respective apps when clicked. All of this also works in secret links! It&apos;s like a secure browser within a browser.&lt;/p&gt;
&lt;p&gt;Here&apos;s an example folder you can check out:
&lt;a href=&quot;https://peergos.net/#%7B%22app%22:%22markdown%22%2c%22path%22:%22demo/media/wiki%22%2c%22args%22:%7B%22filename%22:%22index.md%22%7D%2c%22writable%22:false%2c%22secretLink%22:true%2c%22link%22:%22#6MDZhRRPT4ugkJuUfcWtaZodN5QYzkZKJtHpDHomFJrVhNSZysiFYimpgtcA2F/6MDZhRRPT4ugkJuUfcRzRbPpFimcBNJx2N9TJDnL4W3ETYhwdsWdvgCkXkwipF/31u9ZTR2WcdCcPx6CCUFGRkWxA2d5cvj7CQWQCqVXAVt2TRi2uaZzKW8xJ1bSczhURvuTJyxWdXrTjKYoBC5FJycZcpdau8/5Pf7Sv1HuhpVKRKNt289WogNtTjBavmKAkxzXjE6qMFAuigk5YP%22%2c%22open%22:true%7D&quot;&gt;markdown browser demo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/markdown-browser.jpg&quot; alt=&quot;mdbrowser&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;400px&quot; /&gt;
&lt;br/&gt;
Markdown browser
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;You could use this like a wiki, and grant certain people write access to individual files or sub folders. You could mirror a git repo here and use this to view the readme or documentation. The possibilities are endless.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Release the BATs (block level access control in IPFS)</title>
        <link href="https://peergos.org/posts/bats" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/bats</id>
        <published>2022-01-25T00:00:00Z</published>
        <updated>2022-01-25T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;The main valid criticism of private applications built on &lt;a href=&quot;https://ipfs.io&quot;&gt;IPFS&lt;/a&gt; is that blocks in IPFS are public. Yes, you can encrypt them, but the ciphertext is still fundamentally public. Or it was – until now. We&apos;ve implemented block level access control in bitswap (the block exchange protocol used by IPFS). This means that only the people granted access to a file will be able to retrieve the encrypted blocks that constitute it. It&apos;s a ground-breaking advance: nothing else built on IPFS is this private.&lt;/p&gt;
&lt;p&gt;In the rest of this post, we&apos;re going to talk about:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;how the design works from the bitswap protocol level up to the Peergos client, and&lt;/li&gt;
&lt;li&gt;how we turn this into an autoscaling post-quantum capability-based access-control mechanism.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To begin with, let&apos;s see how things currently work.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/bitswap-unauthed.png&quot; alt=&quot;unauthed&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Unauthed bitswap retrieving a block.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;When an app on IPFS wants a block of data, it asks IPFS for the data corresponding to its content identifier, or &lt;a href=&quot;https://docs.ipfs.io/concepts/content-addressing/#identifier-formats&quot;&gt;CID&lt;/a&gt; (basically, a hash of the data). IPFS will then search the global IPFS network for nodes that have this CID. At the same time, it will ask any nodes it&apos;s already in contact with: &amp;quot;Do you have this CID?&amp;quot;. Any contacted node that has the block can respond with the data. A nice property of this is that any node that has the content can serve it up, which means that it autoscales to demand.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/bitswap-authed.png&quot; alt=&quot;authed&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Authed bitswap retrieving a block.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We have extended this protocol to have an optional auth string paired with every CID. In Peergos, this auth string is an &lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html&quot;&gt;S3 V4 signature&lt;/a&gt;, which is time-limited, includes the CID, and is tied to the requesting node&apos;s public key (to prevent replay attacks). A replay attack would be if it were possible for someone without the block, who we had sent a valid auth token, to retrieve the block themselves directly using the token. As an anology, consider a ticketed event. If someone buys a ticket, and then a friend of theirs copies the ticket and uses that to gain entry, that is a replay attack. If, however, the tickets included the buyer&apos;s name on the ticket (they were non-transferable) and the event verified the holder&apos;s name on entry then the friend couldn&apos;t get in, even with the original ticket.&lt;/p&gt;
&lt;p&gt;We do a similar thing to avoid this by using the source node&apos;s public key as the domain in the S3 request. This way we can broadcast a cid and auth string to the network and no one but us can use that auth string. The S3 V4 signature scheme is essentially repeated &lt;a href=&quot;https://en.wikipedia.org/wiki/HMAC&quot;&gt;hmac-sha256&lt;/a&gt; and needs a secret key to function. Such a secret key would grant the holder access to the block, so we call it a Block Access Token or BAT for short, and each is 32 bytes long. Since it only depends on hmac-sha256, which itself only depends on sha256, it is post-quantum - a large quantum computer does not break it.&lt;/p&gt;
&lt;p&gt;The primary BAT used for this authentication is derived from the block itself. This means any instance that retrieves such a block (after being authorised) can continue to serve it up and enforce the same access control, thus maintaining the autoscaling properties in a privacy-preserving way.&lt;/p&gt;
&lt;p&gt;There are two formats of blocks in Peergos, cbor and raw. Raw blocks are the most sensitive (they hold users&apos; encrypted data) and are just fragments of ciphertext with no additional structure. Cbor blocks are valid &lt;a href=&quot;https://ipld.io/docs/codecs/known/dag-cbor/&quot;&gt;dag-cbor&lt;/a&gt; structured IPLD objects which can reference other blocks. How could we put a BAT in these blocks? In a cbor block, it is easy to choose a canonical place to put a list of BATs. If the cbor is a map object, we put a list of BATs at the top level under the key &amp;quot;bats&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/cbor-bats.png&quot; alt=&quot;cbor-block-auth&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Structure for storing BATs in cbor blocks
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;For raw objects, it is a little more difficult, as we also need to support raw blocks that do not have a BAT (either legacy blocks or ones specifically made public). Our design uses a detectable prefix of 8 FIXED bytes followed by a cbor list of BATs before the actual ciphertext of the block.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/raw-bats.png&quot; alt=&quot;raw-bock-auth&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Structure for storing BATs in the prefix of a raw block
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We normally have two bats per block. One is inline - and specific to that block only. The other is a user wide &amp;quot;mirror&amp;quot; BAT - and referenced in the block by its hash. The mirror BAT is for when a user wants to mirror all their data on another instance, or migrate to another instance.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt; &lt;/th&gt;&lt;th&gt;Chunk 1&lt;/th&gt;&lt;th&gt;Chunk 2&lt;/th&gt;&lt;th&gt;Chunk 3&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;BAT stream secret&lt;/td&gt;&lt;td&gt;Sb (encrypted in base data)&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BAT[] (unencrypted in root cbor object under &amp;quot;bats&amp;quot;)&lt;/td&gt;&lt;td&gt;B1=randomBytes(32)&lt;/td&gt;&lt;td&gt;B2=hash(Sb + B1)&lt;/td&gt;&lt;td&gt;B3=hash(Sb + B2)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;center&gt;
BAT derivation for subsequent chunks of a file
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Each 5 MiB chunk of a file or directory has its own unique BAT, so the server still cannot link the different blocks of a file to deduce the padded size of the file. Subsequent chunk BATs within a file are &lt;a href=&quot;/posts/fast-seeking&quot;&gt;derived&lt;/a&gt; in the same way as we do the CHAMP labels, by hashing the current chunk BAT with a stream-secret, stored encrypted in the first chunk. This maintains our ability to seek within arbitrarily large files without any IO operations (just local hashing and then a final lookup of the requested chunk). When someone&apos;s access to a file or directory is revoked, the BATs are also changed, making it impossible to retrieve the new ciphertext even with previous access.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Encrypted email storage and client</title>
        <link href="https://peergos.org/posts/email-bridge" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/email-bridge</id>
        <published>2021-11-20T00:00:00Z</published>
        <updated>2021-11-20T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;We&apos;re pleased to announce the latest feature built as part of our NGI grant - an email bridge. The email bridge is a separate server that can run anywhere. It will encrypt incoming emails and store them in your Peergos space, as well as sending outgoing emails, which you create from the web interface. All it needs is the SMTP and IMAP credentials to your email, and write-access to a particular folder in your Peergos space. This is what the web client looks like:&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/email-inbox.png&quot; alt=&quot;email&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Peergos email client.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;When your email bridge receives an incoming email, it will asymmetrically encrypt the email and any attachments (so even the bridge can&apos;t read it) and store it in a folder in your Peergos space. When you next login, you decrypt the email and any attachments, and store them in a private folder the bridge doesn&apos;t have access to. In the other direction, you can create a new email which is stored in a file in your Peergos space. The bridge picks this up, sends it as a real email, and deletes the file from the Peergos outbox folder (you keep a private copy that the bridge can&apos;t read). It&apos;s designed in a way that there is no state stored in the bridge; therefore even if it is temporarily compromised, no emails are exposed other than those sent or received during the time of the hacking.&lt;/p&gt;
&lt;p&gt;You can run the bridge anywhere, it doesn&apos;t need a domain name or any TLS certs, just your smtp and imap credentials, and write-access to a folder in your Peergos space. To achieve the latter easily, create a new Peergos user just for the email bridge. Then you can friend and share with this user naturally using the existing Peergos interface.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/email-send.png&quot; alt=&quot;email&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Compose an email in Peergos.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Want to try it out already? You&apos;ll first need to run your own email bridge and create a Peergos account for the bridge. Then to enable the email client in Peergos, login or create an account at &lt;a href=&quot;https://peergos.net/?email=true&quot;&gt;https://peergos.net/?email=true&lt;/a&gt; - note the &amp;quot;?email=true&amp;quot; in the URL. Then login and open the email client in Peergos, and put in the username of the email-bridge. Then login as the email bridge user and accept and reciprocate the follow request from your user. Add your username to the email-bridge accounts file to allow sending/receiving emails.&lt;/p&gt;
&lt;p&gt;This work was built as part of our &lt;a href=&quot;/posts/next-generation-internet&quot;&gt;grant&lt;/a&gt; from the Next Generation Internet program (&lt;a href=&quot;https://pointer.ngi.eu/&quot;&gt;NGI POINTER&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Decentralized encrypted chat</title>
        <link href="https://peergos.org/posts/decentralized-chat" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/decentralized-chat</id>
        <published>2021-11-12T00:00:00Z</published>
        <updated>2021-11-12T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;We&apos;re pleased to announce the latest feature built as part of our NGI grant: decentralized encrypted chat. Why build yet another chat protocol, you ask? Our implementation of chat is an application inside Peergos, i.e. it benefits from all the privacy guarantees and access control without having to re-implement all of it.&lt;/p&gt;
&lt;p&gt;First, let’s see how it looks.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/chat.webp&quot; alt=&quot;chat&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Decentralized encrypted chat.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;The user interface is fairly familiar. However, one difference to most messengers is that it is built to respect you and your attention: no notifications and no nagging pop ups to &amp;quot;install our native app where we can track you more&amp;quot;. You can only chat with your friends on Peergos. No unwanted messages - you have to accept someone as a friend before they request a chat with you. All you need to start a chat with a friend is their username - unlike some messengers that demand your phone number, and require you to share it with those you chat with.&lt;/p&gt;
&lt;p&gt;You can do all the usual things: textual messages, images, videos, emoji. The app allows one-to-one chats and group chats. Group chats can have any number of members and any number of admins; admins can grant and revoke admin status to others. Your Peergos server doesn&apos;t even know you&apos;re sending chat messages, because these are just regular files in your Peergos space.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/group-chat.webp&quot; alt=&quot;group chat&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;500px&quot; /&gt;
&lt;br/&gt;
Group chat.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Under the hood, each chat stores its messages as an append-only file in Peergos. Messages are not pushed to other recipients - to send a message, you simply append it to your own copy of the chat log. Other members will then pull the message and copy it into their log the next time they open the app – messages propagate peer-to-peer, from member to member. The messages themselves form a merkle dag with each message containing a merkle link to previous messages. With this structure, we are able to maintain causal order. That means you only see a reply to a message after seeing the message it is replying to. In group chats, when a member leaves, or is removed from a chat, then their access to the chat is revoked, preventing them from seeing any future messages.&lt;/p&gt;
&lt;p&gt;Want to try it out already? To enable the chat app, simply login or create an account at &lt;a href=&quot;https://peergos.net/?chat=true&quot;&gt;https://peergos.net/?chat=true&lt;/a&gt; - note the &amp;quot;?chat=true&amp;quot; in the URL. We will enable chat by default once the UX is more polished.&lt;/p&gt;
&lt;p&gt;This work was built as part of our &lt;a href=&quot;/posts/next-generation-internet&quot;&gt;grant&lt;/a&gt; from the Next Generation Internet program (&lt;a href=&quot;https://pointer.ngi.eu/&quot;&gt;NGI POINTER&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Peergos launches decentralized &amp; encrypted social media</title>
        <link href="https://peergos.org/posts/decentralized-social-media" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/decentralized-social-media</id>
        <published>2021-04-12T00:00:00+01:00</published>
        <updated>2021-04-12T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;&lt;a href=&quot;https://peergos.org/posts/the-social-dilemma&quot;&gt;We&apos;ve written before&lt;/a&gt; about the problems with existing social media and how we think they should be solved. After a few months hard at work, we&apos;re launching our decentralized and end-to-end encrypted social network!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/social-feed.webp&quot; alt=&quot;profile&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;300px&quot; /&gt;
&lt;br/&gt;
Private social media.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;As you would expect from any social media app, you can create posts with text, images, video or audio and choose how the post is shared - with your friends only, or all your followers. Commenting on a post will re-share and increase the audience for the original post in line with the author&apos;s intent (friends or followers) without exposing anyone&apos;s social network. You can&apos;t see all the friends of someone, even if you are friends with them. See the gif below for how to access your social feed.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;/p&gt;
&lt;video src=&quot;/theme/img/blog/social-feed.mp4&quot; class=&quot;narrow-video&quot; autoplay loop muted playsinline&gt;&lt;/video&gt;
&lt;p&gt;&lt;br/&gt;
To access the Peergos social network, log in, click on apps, and then the social feed icon.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;So why an encrypted and decentralized alternative? There are many problems for both society and &lt;a href=&quot;https://aeon.co/essays/privacy-matters-because-it-empowers-us-all&quot;&gt;individuals&lt;/a&gt; caused by current social media - including &lt;a href=&quot;https://www.theguardian.com/technology/2021/apr/11/another-huge-data-breach-another-stony-silence-from-facebook&quot;&gt;huge data breaches&lt;/a&gt; to increased polarisation and &lt;a href=&quot;https://www.globalextremism.org/post/democracies-under-threat&quot;&gt;threats to democracy&lt;/a&gt;. We believe social media should be designed with the interests of the end-user in mind and that a fundamental requirement is agency for people over what they see and who they interact with. In Peergos, you only see content shared with you by your friends or people you follow. End-to-end encryption of your social feed means that &lt;strong&gt;mass data gathering and surveillance is not possible&lt;/strong&gt;. Without the ability to gather data, machine learning algorithms cannot be trained and you cannot be targeted with content or ads (sorry not sorry, Cambridge Analytica).&lt;/p&gt;
&lt;p&gt;What about decentralization? If you&apos;ve used email then you&apos;ve used something similar called a federated system (federation is a weaker form of decentralization). Anyone can run an email server, and those servers can all talk to each other. Changing your email address is painful though because your identity is tied to your hosting provider. If you want to move from Gmail to another provider you need to tell all your contacts about your new email address.&lt;/p&gt;
&lt;p&gt;In a decentralized system such as Peergos, identity is self-sovereign and under your ownership. If you want to move to a new server, you can do this whilst keeping all your friends, followers and data. All links continue to work unmodified. This is because data is retrieved using &lt;a href=&quot;https://docs.ipfs.io/concepts/content-addressing/&quot;&gt;content-addressed&lt;/a&gt; and public key-addressed requests thanks to the magic of building on &lt;a href=&quot;https://ipfs.io&quot;&gt;IPFS&lt;/a&gt;. There is no location-based addressing anywhere in our protocol (including DNS). You&apos;re even able to change servers if your original host server becomes malicious. No other social network can do this currently!&lt;/p&gt;
&lt;p&gt;Finally, we&apos;ve wrapped all this in a humane user interface that&apos;s explicitly designed not to optimize for &lt;del&gt;user engagement&lt;/del&gt; addiction. Social media should enhance your life, not become your life.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This work was built as part of our &lt;a href=&quot;/posts/next-generation-internet&quot;&gt;grant&lt;/a&gt; from the Next Generation Internet program (&lt;a href=&quot;https://pointer.ngi.eu/&quot;&gt;NGI POINTER&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Private and customizable profiles</title>
        <link href="https://peergos.org/posts/social-profile" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/social-profile</id>
        <published>2021-03-22T00:00:00Z</published>
        <updated>2021-03-22T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Our latest feature is another step towards making it easier to connect with your real life friends, family and colleagues on Peergos - social profiles! It goes without saying that we&apos;ve put quite a bit of thought into how we can make sure you&apos;re able to keep certain pieces of personal information private and secure, while making other pieces public. Our solution: profiles that display only the information you choose to share with your friends on Peergos.&lt;/p&gt;
&lt;p&gt;You can now create a profile and set an image, status, bio and all the usual fields like email, phone, first name and last name. What you choose to fill in is up to you! What&apos;s more, you control who can see each of these fields by granting read access to each field to individual users or groups such as your friends or followers on Peergos. As you&apos;d expect from Team Peergos, everything is end-to-end encrypted and the server can&apos;t see anything.&lt;/p&gt;
&lt;p&gt;To get started, &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;signup&lt;/a&gt; or &lt;a href=&quot;https://peergos.net&quot;&gt;log in&lt;/a&gt; to your existing account, click on the settings button in the top right hand corner and select &amp;quot;Profile&amp;quot;. This will bring up the profile screen. Simply fill in some details, click &amp;quot;Save Profile&amp;quot;, and then you&apos;ll be able to select who gets to see which parts of your profile. It&apos;s like having a fully customizable business card!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/profile.png&quot; alt=&quot;profile&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;60%&quot; /&gt;
&lt;br/&gt;
Setup your private profile and control who can see which parts.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;How does this work, you ask? Under the hood, each field on your profile ends up as a file in Peergos, which means we can leverage our built-in access control easily. We just agree a convention on the path, e.g. &lt;tt&gt;/username/.profile/firstname&lt;/tt&gt;. Then, anyone trying to view your profile can only see the parts you&apos;ve shared with them.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/robinhood.png&quot; alt=&quot;robin hood&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;40%&quot; /&gt;
&lt;br/&gt;
A friend viewing Robin Hood&apos;s profile. They&apos;ve only been granted access to a few fields.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;This work was built as part of our &lt;a href=&quot;/posts/next-generation-internet&quot;&gt;grant&lt;/a&gt; from the Next Generation Internet program (&lt;a href=&quot;https://pointer.ngi.eu/&quot;&gt;NGI POINTER&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Simple decentralized web hosting on Peergos</title>
        <link href="https://peergos.org/posts/p2p-web-hosting" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/p2p-web-hosting</id>
        <published>2021-03-01T00:00:00Z</published>
        <updated>2021-03-01T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;You already know that Peergos lets you store and share files securely and privately. Now, you can also host your own website on it!&lt;/p&gt;
&lt;p&gt;We always thought getting a website up and running should be one of the easiest things to do on the web. There are plenty of options available for website hosting, but with Peergos there&apos;s no need to buy a domain name, arrange TLS certificates, or run a server to host the content. You also don&apos;t need any cryptocurrency to post or update your website, so you can get free instantaneous updates and peer-to-peer authenticated delivery. You can sign up to &lt;a href=&quot;https://peergos.net?signup=true&quot;&gt;our server&lt;/a&gt; today and get started right away in just two easy steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Upload your website files to a directory in Peergos.
&lt;/li&gt;
&lt;li&gt;
Go to your profile, set that directory as your website and click publish.
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Your personal website will now be available at &lt;tt&gt;https://&amp;lt;your-user-name&amp;gt;.peergos.me&lt;/tt&gt;. It doesn&apos;t get any simpler than that. Let&apos;s see this in action!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;/p&gt;
&lt;video src=&quot;/theme/img/blog/p2p-webhosting.mp4&quot; class=&quot;wide-video&quot; autoplay loop muted playsinline&gt;&lt;/video&gt;
&lt;p&gt;&lt;br/&gt;
Host your decentralized website directly from Peergos.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Any changes made to your website files are automatically and instantly reflected in your website. When we say instantaneous, we mean it. Check it out below!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;/p&gt;
&lt;video src=&quot;/theme/img/blog/p2p-web-update.mp4&quot; class=&quot;wide-video&quot; autoplay loop muted playsinline&gt;&lt;/video&gt;
&lt;p&gt;&lt;br/&gt;
Instantaneous and free updates to your decentralized website.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;When you publish a website from Peergos, you can view it through any Peergos gateway. We&apos;re running one at &lt;tt&gt;peergos.me&lt;/tt&gt;, so your website will be available at &lt;tt&gt;https://&amp;lt;your-user-name&amp;gt;.peergos.me&lt;/tt&gt;, and viewable in any browser today. Bear in mind that viewing through a public gateway like that still relies on DNS and the TLS certificate authorities, which are both single points of failure that are vulnerable to attack. However, we can actually get around both of these by viewing someone&apos;s site through a local Peergos gateway. To visit someone&apos;s site in this way, you just run a local Peergos instance and browse to &lt;tt&gt;http://&amp;lt;username&amp;gt;.peergos.localhost:9000&lt;/tt&gt;. The gateway looks up the public key of the username provided in the localhost subdomain via the Peergos PKI, then retrieves the website and serves it. All this is done without relying on DNS or TLS certificates anywhere. We are thus able to use localhost subdomains to achieve isolation and security between different sites served from one local gateway.&lt;/p&gt;
&lt;p&gt;Websites hosted on Peergos benefit from our resilient and reliable decentralized architecture. Most of the heavy lifting is done by &lt;a href=&quot;https://ipfs.io&quot;&gt;IPFS&lt;/a&gt; through content addressing and public key based routing. With our architecture, we add fast mutable pointers and human-readable names. Therefore, you can trust that the content of your website will be readily available without having to rely on a single-point-of-failure-server anywhere.&lt;/p&gt;
&lt;p&gt;In the future, we will enable viewing such websites directly inside the Peergos web interface. At that point, Peergos will really start to look like a new web.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Stay tuned for introductions to a few other new features and apps we&apos;re building as part of our &lt;a href=&quot;/posts/next-generation-internet&quot;&gt;grant&lt;/a&gt; from the Next Generation Internet program (&lt;a href=&quot;https://pointer.ngi.eu/&quot;&gt;NGI POINTER&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Encrypted shareable calendar</title>
        <link href="https://peergos.org/posts/calendar" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/calendar</id>
        <published>2021-02-07T00:00:00Z</published>
        <updated>2021-02-07T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;We are very pleased to announce the latest Peergos application: a private calendar. The calendar is fully end-to-end encrypted, and allows you to share individual events securely – both with friends on Peergos and externally via secret link. Events are standard iCal files, and can be imported or exported to other calendar apps. You can even share entire calendars! You can create multiple calendars, and events can be one-off or repeating.&lt;/p&gt;
&lt;p&gt;Interestingly, as the calendar is written on top of Peergos, the app itself doesn&apos;t include any encryption or sharing code, because the underlying Peergos layer handles that.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/calendar.png&quot; alt=&quot;calendar&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;90%&quot; /&gt;
&lt;br/&gt;
Create and share private events to manage your schedule.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Stay tuned for introductions to a few other new features and apps we&apos;re building as part of our &lt;a href=&quot;/posts/next-generation-internet&quot;&gt;grant&lt;/a&gt; from the Next Generation Internet program (&lt;a href=&quot;https://pointer.ngi.eu/&quot;&gt;NGI POINTER&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Fast Encrypted File Search</title>
        <link href="https://peergos.org/posts/file-search" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/file-search</id>
        <published>2020-12-22T00:00:00Z</published>
        <updated>2020-12-22T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;A much requested feature in Peergos has been the ability to search your whole Peergos space for files. This is more difficult than it sounds in an end-to-end encrypted setting.&lt;/p&gt;
&lt;p&gt;A normal web app like, say, Facebook, would implement search by just sending the query to the server, which would then do the search for you, and return back the results. This is only possible because in websites like Facebook the server can read all your data. We don&apos;t have that luxury and so we had to take a different approach to search. First, let&apos;s see it in action.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;/p&gt;
&lt;video src=&quot;/theme/img/blog/search.mp4&quot; class=&quot;wide-video&quot; autoplay loop muted playsinline&gt;&lt;/video&gt;
&lt;p&gt;&lt;br/&gt;
Search for files by name, type, size or modification time.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;To implement search in Peergos we have to do it all client side, without exposing anything to the server (remember, our servers are trustless). Luckily, our systems are designed with this in mind, so you are able to search all the properties of files like name etc. without downloading and decrypting the entire file, just a small amount of encrypted metadata. In the future we might consider constructing an encrypted index of your files to speed things up further but it&apos;s plenty fast enough now for many use cases. You can search by name, modification time, file type or file size. If you want to limit your search to a particular directory you can right click on the directory and select search.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Private Planning Boards in Peergos</title>
        <link href="https://peergos.org/posts/private-kanban" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/private-kanban</id>
        <published>2020-12-09T00:00:00Z</published>
        <updated>2020-12-09T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Working on a new project and need to keep track of multiple tasks or workstreams? Peergos has
got you covered! We&apos;re excited to announce the first in a series of new apps in
Peergos - kanban boards! Our kanban boards are multiple, customisable to-do lists, which help your workflow planning.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/kanban.png&quot; alt=&quot;kanban&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;90%&quot; /&gt;
&lt;br/&gt;
Stay on top of everything you need to get done with kanban boards in Peergos.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We love kanban boards! Most of us here at Peergos have used them at various
companies or even personally to stay organised. As much as we love them, we&apos;ve
always been hesitant to use existing kanban board solutions due to privacy and
security concerns. These boards often contain personal or confidential
information - if you&apos;re part of a dev team working on an awesome new product
feature that&apos;s going to dominate the market, you absolutely want to ensure that
any details are kept away from prying eyes. So we built our own!&lt;/p&gt;
&lt;p&gt;You can now create a kanban board anywhere in your Peergos space - simply click
on our application menu in the top left-hand corner (spoiler alert: you might
see some applications there we haven&apos;t told anyone about yet) and then click on the
nifty looking icon. Our boards have all the features you&apos;d expect like dragging
and dropping within and between lists to re-order, easily marking entries as
done, or deleting them.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/app-menu-button.png&quot; alt=&quot;App menu&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
Applications menu button
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;What makes our kanban boards special? All of the data for a given board is
stored in a single file and end-to-end encrypted so no-one but you can see
what&apos;s on your board. Unless, of course, you want other people to see your board!
Just like any other file in Peergos, you can grant your friends read or write access
to your boards, and even share them via secret links, which anyone can use. No need
to worry about complicated access control, everything is securely handled
by Peergos so you can focus on staying organized and getting
things done.&lt;/p&gt;
&lt;p&gt;So whether it&apos;s tracking your shopping list, planning a big project or managing
your time, try out kanban boards in Peergos. We&apos;re using it as an
internal project management tool, and one of our core team members is currently
using a Peergos kanban board to manage their house sale and move!&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/ngi-logo.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65px&quot; /&gt;
&lt;img src=&quot;/theme/img/eu.png&quot; alt=&quot;NGI Pointer&quot; id=&quot;id&quot; class=&quot;class&quot; height=&quot;65&quot; /&gt;
&lt;/center&gt;
&lt;br/&gt;
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>How to solve the social dilemma and fix social media</title>
        <link href="https://peergos.org/posts/the-social-dilemma" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/the-social-dilemma</id>
        <published>2020-09-20T00:00:00+01:00</published>
        <updated>2020-09-20T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;&lt;center&gt;
&lt;a href=&quot;https://www.ngi.eu&quot;&gt;
&lt;img src=&quot;/theme/img/blog/the-social-dilemma.webp&quot; alt=&quot;The Social Dilemma&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;/a&gt;
&lt;br/&gt;
Still from the Netflix documentary, The Social Dilemma
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Netflix recently aired a new documentary, &lt;a href=&quot;https://www.humanetech.com/the-social-dilemma&quot;&gt;&amp;quot;The Social Dilemma&amp;quot;&lt;/a&gt;, which explores in detail the harmful effects that social networks such as Facebook and Instagram have on individuals and society at large. One of the interviewees in the documentary, Jeff Seibert, has written a more &lt;a href=&quot;https://medium.com/@jeff_seibert/the-mechanics-and-psychology-behind-the-social-dilemma-719d618aa8ce&quot;&gt;detailed piece&lt;/a&gt; on the underlying causes, methods and impacts of current social networks on society and democracy. He argues that advertising-driven business models combined with user-generated content and machine learning lead to increased polarization and anxiety, widespread misinformation, and mass-scale manipulation of society. Some proposals to fight this include regulation, like the General Data Protection Regulation (GDPR), which place strong controls on collecting data on users, even potentially banning personalized advertising.&lt;/p&gt;
&lt;p&gt;We agree with Seibert, and we also have a solution. Regulation has the danger of increasing the power of the dominant incumbents, if it&apos;s not done correctly. They treat it as a burden and moat preventing competition, and competition is what is needed most. What new competitors need is a different business model. A business based on selling ads is not aligned with the interests of its user base. &lt;strong&gt;What if, instead of advertisers being the customer, the actual end-users were the customer?&lt;/strong&gt; If users paid a small amount on a subscription basis, then the business would be incentivized to keep customers happy. This model may not maximize revenue for the company, but so long as the company is sustainable and able to grow, then that shouldn&apos;t matter. The apparent obsession with maximising revenue and growth at all costs is not healthy, and models in which users pay directly for services are better in the long term - for individuals and for society.&lt;/p&gt;
&lt;p&gt;Whatsapp was a great example of a succesful subscription-based business. They started off charging a subscription of $1 per year. At the time of their acquisition, in 2014, Whatsapp had 450 million monthly active users, and annualized revenue of around $32M [&lt;a href=&quot;https://techcrunch.com/2014/10/28/whatsapp-revenue&quot;&gt;source&lt;/a&gt;], and were adding a million new users every day [&lt;a href=&quot;https://investor.fb.com/investor-news/press-release-details/2014/Facebook-to-Acquire-WhatsApp/default.aspx&quot;&gt;source&lt;/a&gt;]. For a company that had only 55 employees and operating cost around $10M, that sounds sustainable. Whatsapp also weren&apos;t really pushing for monetization, but rather growth. For example, they were relaxed about enforcing the $1 fee after the first year, and didn&apos;t apply it at all in certain countries. For comparison, at the time Facebook was making $7 in revenue per user.&lt;/p&gt;
&lt;p&gt;Even a good business model can change depending on who owns the company. If investors or shareholders demand that profit is maximized, then that&apos;s what you have to do. To prevent this you either need to have benevolent investors, who aren&apos;t focused on maximising revenue at all costs, or don&apos;t have any investors. This could mean being entirely self-owned, or being a non-profit organisation. This alone probably isn&apos;t enough though - what&apos;s needed are built-in defences keeping any potential future owners honest and aligned with the users.&lt;/p&gt;
&lt;p&gt;One of these defences to keep the company&apos;s interests aligned with the users is to reduce the barrier to leaving. If the social network is &lt;a href=&quot;https://en.wikipedia.org/wiki/Decentralization&quot;&gt;decentralized&lt;/a&gt; then this is structurally enforced. In that case, if the company starts to misbehave in some way, users can easily move to another company (or self host) and keep all their data and friends. This is not possible with centralized social networks without open protocols. An open protocol actually takes this even further, as the user interface itself can be replaced. If the company were to start adding malicious features to the interface, people can simply switch to a different one. Combining this with being open source means it is also easy to modify the existing user interface. Social media incentives have never been this aligned with the users before.&lt;/p&gt;
&lt;p&gt;There is still one major ace card to be played to protect users: end-to-end encryption. If the service cannot read your data, then it is impossible to target ads, even if they wanted to. This means that any social feed cannot be an arbitrary black box machine learning algorithm - it has to be assembled client side, thus putting end users in full control of their data and returning their autonomy.&lt;/p&gt;
&lt;p&gt;The final component is ethical humane design. That means designing for the good of the human user. No manipulative notifications or dark UI patterns designed to increase engagement and steal more of the user&apos;s life. Social media should be a tool that is used to enhance people&apos;s lives, not something that manipulates people into spending more time on it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;If something is a tool, it genuinely is just sitting there waiting, patiently. If something is not a tool, it&apos;s demanding things from you. It&apos;s seducing you. It&apos;s manipulating you. It wants things from you. And we&apos;ve moved away from having a tools based technology environment, to an addiction and manipulation based technology environment. That&apos;s what&apos;s changed. Social media isn&apos;t a tool that&apos;s just waiting to be used. It has its own goals, and its own means of pursuing them by using your psychology against you.&amp;quot;&lt;/em&gt; &lt;br/&gt;&lt;/p&gt;
&lt;div class=&quot;attribution&quot;&gt;-Tristan Harris in The Social Dilemma&lt;/div&gt;
&lt;p&gt;Putting all of the above together, what is needed is an open, decentralized, end-to-end encrypted and ethical social network whose business model is subscription based.&lt;/p&gt;
&lt;p&gt;That&apos;s exactly what we&apos;re building.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Peergos wins EU Next Generation Internet grant</title>
        <link href="https://peergos.org/posts/next-generation-internet" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/next-generation-internet</id>
        <published>2020-08-31T00:00:00+01:00</published>
        <updated>2020-08-31T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;&lt;center&gt;
&lt;a href=&quot;https://www.ngi.eu&quot;&gt;
&lt;img src=&quot;/theme/img/blog/eu-ngi.png&quot; alt=&quot;Supported By&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;/a&gt;
&lt;br/&gt;
Peergos, supported by EU - Next Generation Internet
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We are proud to announce that Peergos has been awarded a €200,000 grant by
the Next Generation Internet Program for Open Internet Renovation
(&lt;a href=&quot;https://pointer.ngi.eu&quot;&gt;NGI-POINTER&lt;/a&gt;). We are incredibly excited to have been
identified as NGI Architects and selected for the program, as it is both
ambitious in scope and aligned with our values. We will be using this
opportunity to develop new and exciting features for Peergos that will see it
evolve into a &lt;strong&gt;privacy-focused, decentralized social network&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;NGI-POINTER aims to find ambitious &amp;quot;NGI architects&amp;quot; to change the underlying
fabric of the internet and the web. It does so by supporting promising bottom-up
projects that are able to build, on top of state-of-the-art research,
scalable protocols and tools to assist in the practical transition or
migration to new or updated technologies, whilst keeping European Values at
the core.&lt;/p&gt;
&lt;p&gt;NGI-POINTER is funded by the European Union&apos;s Horizon 2020 initiative which is
designed to stimulate innovation and economic growth. We strongly believe in
the &lt;a href=&quot;https://europa.eu/european-union/about-eu/eu-in-brief_en&quot;&gt;fundamental
values&lt;/a&gt; that the EU
stands for: respect for human dignity and human rights, freedom, democracy,
equality and the rule of law. In fact, the EU Charter of Fundamental Rights
explicitly mentions the protection of personal data and the right to privacy.&lt;/p&gt;
&lt;p&gt;We&apos;ve previously received support from Protocol Labs and through the Oxford
Foundry accelerator program which has enabled us to work on particular aspects
of Peergos and grow as a company. Up until now we have been reliant on time and
work volunteered by our core team, so a grant of this size represents a step
change for us. At least two of our core team members will now be able to work
full-time on Peergos.&lt;/p&gt;
&lt;p&gt;The NGI-POINTER program will run for a year, so we have a lot of work to do in
a short space of time. Alongside this project, we will continue towards our
goal of becoming a bootstrapped business by offering subscription plans for
private and secure storage, hosted by us! We think this is the best way to keep
our incentives aligned with those of the Peergos community.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;NGI POINTER (NGI Program for Open Internet Renovation) has received funding from the European Commission, as part of the Horizon 2020 Research and Innovation Programme, under Grant Agreement No. 871528.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Direct S3 access</title>
        <link href="https://peergos.org/posts/direct-s3" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/direct-s3</id>
        <published>2020-08-16T00:00:00+01:00</published>
        <updated>2020-08-16T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Peergos uses &lt;a href=&quot;https://ipfs.tech&quot;&gt;IPFS&lt;/a&gt; to store its data and IPFS supports several kinds of blockstores, from various kinds of local disk based storage to an S3 based store. The S3 store is useful because it automatically provides redundancy and availability, and can also hold much more data than any disk. There are also many providers of S3 compatible storage now. For a while now, we&apos;ve supported using the S3 based blockstore in Peergos. However this wasn&apos;t visible to end users, it was only a server side thing. This means that when uploading or downloading data it all had to go through the Peergos server.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/proxied-s3-dataflow.png&quot; alt=&quot;Old data flow with S3&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
The flow of data in previous S3 usage, which proxied through the Peergos server
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We have now implemented direct S3 access for reads and writes from the browser/client. Clients can read and write directly to an S3 bucket after authorization from the Peergos server. This new feature makes the Peergos server much more scalable and reliable. The typical bandwidth required of the Peergos server is reduced by ~100x.&lt;/p&gt;
&lt;p&gt;There are two modes of read operation; public and authorised. In public mode, all encrypted blocks can be read directly from S3 without any permission. This is the fastest, but may not suit your pricing model for S3. In authorised mode every read request has to first get permission from the peergos server, which signs a url that is temporarily authorised to read that object from S3. The client then directly downloads the block from S3. This is illustrated below.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/direct-s3-reads.png&quot; alt=&quot;Direct S3 reads&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
Direct S3 reads
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;This is all very well, but what about writes? What if there are many users on the same server? This is where it starts to get beautiful... All users on the same Peergos server share the same S3 bucket, and yet there is no possibility for conflict! This is because the blocks in S3 are content addressed! When a client wants to upload a block they first pre-authorise the block hash with the peergos server which returns a signed url the client can use to upload directly to S3. Upon upload, S3 automatically checks the sha256 hash and size of the block with what was signed. The data flow is shown below.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/direct-s3-writes.png&quot; alt=&quot;Direct S3 writes&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
Direct S3 writes
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;It should be clear how this takes most of the load off of the Peergos server, thus allowing a single server to handle many more users.&lt;/p&gt;
&lt;p&gt;The kind of functionality required for this isn&apos;t actually exposed by the official S3 SDK. So to get this working we had to implement our own version of the S3 client. It&apos;s remarkably simple and only took us a single class, without any dependencies except an hmac-sha256 implementation. The added benefit of this is that we&apos;ve been able to remove the amazon S3 sdk entirely from our codebase, which was 60mb of dependencies! Compare this with the rest of Peergos including all dependencies, which add up to only 16mb.&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Peergos release v0.3.0</title>
        <link href="https://peergos.org/posts/release-v0.3.0" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/release-v0.3.0</id>
        <published>2020-08-10T00:00:00+01:00</published>
        <updated>2020-08-10T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Privacy is alive and well at Peergos as we continue on our mission to build the private web where you are in control of your data and identity.&lt;/p&gt;
&lt;p&gt;We are pleased to announce the release of &lt;a href=&quot;https://peergos.net/public/peergos/releases&quot;&gt;v0.3.0&lt;/a&gt;, and it&apos;s a big one! You can try it out on &lt;a href=&quot;https://peergos.net&quot;&gt;peergos.net&lt;/a&gt; now. This release patches a number of bugs in both the server and the client, and also brings a host of cool new features. There&apos;s too much to talk about in a single blog post, but we&apos;ll mention everything briefly before diving deep in later posts.&lt;/p&gt;
&lt;p&gt;Some of the highlights include:&lt;/p&gt;
&lt;h3 id=&quot;performance-improvements&quot;&gt;Performance improvements&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;S3 datastore - read and write directly to S3 from the browser without proxying through a Peergos server&lt;/li&gt;
&lt;li&gt;GC is now fully concurrent and doesn&apos;t have any &amp;quot;stop the world&amp;quot; pauses&lt;/li&gt;
&lt;li&gt;Smoother HD video streaming through a buffered async reader&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;client&quot;&gt;Client&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Improved sharing UX&lt;/li&gt;
&lt;li&gt;Saving a document in the text editor is now 7x faster&lt;/li&gt;
&lt;li&gt;Easily delete your account and all your data&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;server&quot;&gt;Server&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Privacy-respecting payments - self-host a Peergos server and charge for storage&lt;/li&gt;
&lt;li&gt;Easily install and run IPFS via a top-level command&lt;/li&gt;
&lt;li&gt;Expanded quota APIs&lt;/li&gt;
&lt;li&gt;Postgres is now supported as well as SQLite&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;protocol-upgrades&quot;&gt;Protocol upgrades&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Upgrade to IPFS v0.6.0 - see the release notes &lt;a href=&quot;https://docs.ipfs.io/recent-releases/go-ipfs-0-6/#features&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Support base36 and base64 in multibase&lt;/li&gt;
&lt;li&gt;Limit identity multihashes to 36 bytes&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We are particularly proud of the direct S3 datastore as it allows a Peergos server to use S3 compatible storage for the blockstore. Clients can read and write directly to an S3 bucket after authorization from the Peergos server. This new feature makes the Peergos server much more scalable and reliable, and gets around the need for complicated access policies when using S3. We will be exploring this feature in more detail soon!&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Keybase has left the building</title>
        <link href="https://peergos.org/posts/keybase-left-building" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/keybase-left-building</id>
        <published>2020-05-11T00:00:00+01:00</published>
        <updated>2020-05-11T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;It&apos;s a story that most of us have heard before. You found this cool new service, and you sign up and invest time and energy learning how to use it. Things are great! Then at some point it gets bought or otherwise acquired. There will be promises that the service will continue to run as per usual, probably even improve, but sooner or later the announcement comes that it&apos;s being shut down. There goes the tool you&apos;ve relied on for years. If the tool happens to be a social one, where you&apos;ve had to convince your friends or colleagues to use it, then you are doubly-burned.&lt;/p&gt;
&lt;p&gt;You may have seen the recent news that Keybase has been acquired by Zoom. If you haven&apos;t heard of them before, Keybase links your social accounts to a Keybase identity in a cryptographically provable way so that people can verify you are who you say you are. On top of that, they also offer end-to-end encrypted chat and secure file storage.&lt;/p&gt;
&lt;p&gt;This is looking like an acqui-hire and is probably a good thing for Zoom and Keybase employees. However, if it is an acqui-hire then it&apos;s quite likely the Keybase product will be shut down eventually. I hope this isn&apos;t the case as Keybase is a great product. However, this is unfortunately an all-too-common exit mode for centralised, closed source systems and while it may be ultimately very profitable for the company being acquired, it very often leaves the users in the lurch. If you (the user) are relying on a particular server to function (or DNS itself) then the product you are using can be taken away from you permanently (or temporarily for that matter) by buying or influencing the owners of that server, or simply blocking them on a network level.&lt;/p&gt;
&lt;p&gt;This is why I&apos;m very careful about what new services or software I sign up to. Life is too short! If the software satisfies the following then it has some built-in defences -&lt;/p&gt;
&lt;p&gt;1) &lt;strong&gt;Open-source&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the software is open-source then, if you really wanted to, you could host your own version of it, or pay someone to set it up for you. Note that this means both the clients and the server need to be open-source. If only the clients are open-source, then you are still locked in and dependent.&lt;/p&gt;
&lt;p&gt;2) &lt;strong&gt;Allows data export&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Being able to self-host is of limited benefit if you can&apos;t also export your existing data from the platform. This ties into the broader issue of data ownership.&lt;/p&gt;
&lt;p&gt;3) &lt;strong&gt;Decentralized&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If a service is actually decentralized (not just federated) then you don&apos;t depend on a central server at all. In this case you don&apos;t actually need to &amp;quot;export&amp;quot; your data, you just migrate server. Ideally, migrating to a different server doesn&apos;t mean you lose any social data, or have to tell your friends etc - this is true if your identity is independent of your hosting server.&lt;/p&gt;
&lt;p&gt;4) &lt;strong&gt;Viable business model with paying users&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Finally, if a service has a viable business model where users are paying, then the interests of the business and the users are much more aligned. Contrast that with advertising-based businesses where third-party advertisers and user data are key to revenue.&lt;/p&gt;
&lt;p&gt;It may still be premature to say we&apos;re losing Keybase, and I hope Zoom listens to the Keybase user community and keeps on offering and developing this product. In the meantime, if any Keybase users are now looking for a replacement storage service - one that has all these defences built-in - have a look around our site and make yourself at home!&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>The perfect social network</title>
        <link href="https://peergos.org/posts/perfect-social-network" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/perfect-social-network</id>
        <published>2020-01-11T00:00:00Z</published>
        <updated>2020-01-11T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;What do most people want in a social network? We all have different ideas, but is it possible to have a set of features that makes everyone happy? We think so!&lt;/p&gt;
&lt;p&gt;This is the Peergos list of &lt;strong&gt;user-focused&lt;/strong&gt; requirements for the Perfect Social Network:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Sharing media&lt;/strong&gt; of any size with any number of people, including &amp;quot;the public&amp;quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Universal login&lt;/strong&gt; - logging in on any device (even when all devices have been lost).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unique usernames&lt;/strong&gt; (human-memorable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location-independent identity&lt;/strong&gt; - users should be able to change hosting provider without losing data or friends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline&lt;/strong&gt; functionality - the ability for many functions to continue to work offline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private data&lt;/strong&gt; - the users decide who sees their posts, and the platform, as well as any server operators, can’t access them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private metadata&lt;/strong&gt; (including the social graph - who connects with whom and when).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Post-quantum&lt;/strong&gt; (safe if a large quantum computer is built).&lt;/li&gt;
&lt;li&gt;Free from &lt;strong&gt;targetted ads&lt;/strong&gt;, or an engagement/outrage-optimised &lt;strong&gt;algorithmic feed&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Fine grained &lt;strong&gt;access control&lt;/strong&gt; - the user can restrict visibility of individual posts.&lt;/li&gt;
&lt;li&gt;The ability to delete or &lt;strong&gt;modify data&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-hostable&lt;/strong&gt; - for those who want more control, whilst still interacting with everyone else.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So why do we think these points are important?&lt;/p&gt;
&lt;p&gt;They fall into three broad categories: convenience, privacy and control.&lt;/p&gt;
&lt;h2 id=&quot;convenience&quot;&gt;Convenience&lt;/h2&gt;
&lt;p&gt;This one’s critical - if something isn&apos;t convenient, then most people won&apos;t use it. But what do we mean by convenience?&lt;/p&gt;
&lt;p&gt;For instance, we are used to having unique usernames on services like email, Twitter, Instagram etc. This enables everyone to unambiguously find friends via a human-memorable name; it also gives an entry point to log in from anywhere. At the moment, many architectures rely on generating keys on each device, and require an existing device to authorise a new one (e.g. Signal). However, this means you cannot log in if you lose all your devices.&lt;/p&gt;
&lt;p&gt;How many times have you switched email addresses and had to tell all your contacts about it? A location-independent identity means that we are free to choose where our data is stored, and move providers without any loss of data and whilst maintaining our full social graph.&lt;/p&gt;
&lt;p&gt;Can we still do anything if the internet is down? Is it possible to search old messages or write new posts without internet access? Most folks would love a social network with offline functionality.&lt;/p&gt;
&lt;p&gt;Finally, sharing large files. Unfortunately, this requirement rules out a lot of currently available architectures: in some popular social networks, sharing a 4 GB file with friends entails storing 4 GB on all their devices – and in append-only structures (i.e. ones you can only add to, never remove from) these files can&apos;t even be deleted!&lt;/p&gt;
&lt;h2 id=&quot;privacy&quot;&gt;Privacy&lt;/h2&gt;
&lt;p&gt;Privacy is a fundamental human right, and the best way to protect it online is with &lt;a href=&quot;https://en.wikipedia.org/wiki/End-to-end_encryption&quot;&gt;end-to-end encryption&lt;/a&gt; of all data. Beyond that, to maintain freedom of association, we need to also safeguard metadata, in particular the social graph – i.e. not only protect what you send, but also what size, to whom and when. The need for full protection rules out protocols that expose lots of data and metadata to both the server administrators and the rest of the network (e.g. ActivityPub).&lt;/p&gt;
&lt;p&gt;Privacy isn&apos;t very good if it is temporary. Given the possibility of a large quantum computer being built, it is important for any privacy-focused protocol to plan for it.&lt;/p&gt;
&lt;h2 id=&quot;control&quot;&gt;Control&lt;/h2&gt;
&lt;p&gt;Many users would like more control over their data online, especially in social networks – and control comes in different flavours.&lt;/p&gt;
&lt;p&gt;Control over your own social feed means that you cannot be manipulated by the platform or its advertisers (as seen in recent elections!). Ideally this is not just a promise by the network operator, but a property enforced by design.&lt;/p&gt;
&lt;p&gt;Fine-grained access control allows users to do what they do naturally in life – control the flow of their information, whether it&apos;s private communication with a friend, or keeping work, family and friends separate.&lt;/p&gt;
&lt;p&gt;Control over modifying or deleting data allows us to be, well, human. People frequently make mistakes and might want to modify something, or simply clear up some space.&lt;/p&gt;
&lt;p&gt;And for those who want Even More Control, the system must be self-hostable. This also keeps the platform honest - a non-self-hostable (centralized) platform can do whatever it wants, and users have no choice but to accept any changes or leave the network entirely. To allow for self-hosting, the platform should be fully open source, including any server code.&lt;/p&gt;
&lt;p&gt;At Peergos, we &lt;em&gt;already&lt;/em&gt; tick the above boxes, except offline functionality and post-quantum – both of which are partial ticks and in progress. Currently we look more like a global social file system, but we will be adding a more traditional social feed in the future. Watch this space for more progress reports!&lt;/p&gt;
&lt;p&gt;Do you agree with our list? What is YOUR perfect social network like? Tweet us at &lt;a href=&quot;https://twitter.com/peergos&quot;&gt;@peergos&lt;/a&gt; with your ideas!&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Atomic access control</title>
        <link href="https://peergos.org/posts/atomic-access-control" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/atomic-access-control</id>
        <published>2019-11-15T00:00:00Z</published>
        <updated>2019-11-15T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;At Peergos we care deeply about your privacy, and the core of privacy is access control. Controlling who can see what. We&apos;ve made some big improvements in this area for our new &lt;a href=&quot;https://peergos.net/public/peergos/releases&quot;&gt;v0.1.4&lt;/a&gt; release, so let&apos;s learn some more about them.&lt;/p&gt;
&lt;p&gt;We have totally rewritten our access revocation implementation. Previously there were some issues with nested write access which could cause data loss. Now in the new version, revoking write access is a single pass over the files and directories you are revoking access to, rather than 3. We&apos;ve also made it atomic. This means your machine can crash at any point and your file system is in a consistent state with all data present.&lt;/p&gt;
&lt;p&gt;Similar improvements have been made to revoking read access and we are working on fuzzing the access control mechanism to further assure correctness and safety. While we had the hood popped open, we also removed unnecessary reloads of the current directory which has made the web interface &lt;em&gt;much snappier&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/new-public-link-ui.png&quot; alt=&quot;New public link UI&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
&lt;b&gt;New&lt;/b&gt; public link UI for https://peergos.net/public/peergos/releases
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We also have a secret to share with you - we have a mechanism for making files public, though it is not added to the web interface yet. Each user can choose to publish a capability to a file or folder that is readable to anyone. The mechanism for this is each user publishing a merkle &lt;a href=&quot;https://blog.acolyer.org/2015/11/27/hamt/&quot;&gt;CHAMP&lt;/a&gt; root, which is a lookup from path to capability. This is currently only used by the &amp;quot;peergos&amp;quot; user for releases of Peergos itself: &lt;a href=&quot;https://peergos.net/public/peergos/releases&quot;&gt;https://peergos.net/public/peergos/releases&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/old-public-link-ui.png&quot; alt=&quot;New public link UI&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
&lt;b&gt;Old&lt;/b&gt; public link UI for https://peergos.net/public/peergos/releases
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Prior to this release, public files were decrypted server side after retrieving the capability from this CHAMP and delivered directly to the requestor. Clearly if we allowed anyone to use the feature then it would be a trivial cross-site-scripting (XSS) vector. So, in preparation for allowing all users to publicly share files, we now make the server retrieve the capability, and then do a http redirect to a &amp;quot;secret link&amp;quot; to that file. This means we get the full Peergos interface for navigating, viewing and downloading public files, and removes the potential for XSS attacks. The file or directory then becomes accessible under the human readable url&lt;/p&gt;
&lt;p&gt;&lt;em&gt;https://peergos.net/public/$path-to-file&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Peergos release v0.1.3</title>
        <link href="https://peergos.org/posts/release-v0.1.3" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/release-v0.1.3</id>
        <published>2019-09-15T00:00:00+01:00</published>
        <updated>2019-09-15T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;We&apos;ve been hard at work, so hard in fact that we&apos;re only now writing another blog post. We&apos;ve sped everything up, enabled native builds, added garbage collection, added S3 storage support and fixed several bugs.&lt;/p&gt;
&lt;p&gt;Everything in this post is contained in our latest release, &lt;a href=&quot;https://peergos.net/public/peergos/releases&quot;&gt;v0.1.3&lt;/a&gt;, which you can try out on our &lt;a href=&quot;https://peergos.net&quot;&gt;server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The most obvious change is that we&apos;ve sped most things up by &lt;em&gt;~2.5X&lt;/em&gt;, notably uploads and downloads. Our download speeds are now comparable to Dropbox, despite the extra overhead of decryption!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/cheetah.webp&quot; alt=&quot;Faster downloads&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
2.5X faster downloads
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;The next big feature is &lt;em&gt;transaction-aware garbage collection&lt;/em&gt;. This is critical to ensure our disks don&apos;t unnecessarily fill up.&lt;/p&gt;
&lt;p&gt;If you change 1 byte of a file bigger than 5 MiB, then we reencrypt that 5 MiB section of file. The new cipher text for this section has nothing in common with the old cipher text (otherwise it wouldn&apos;t be very good encryption!!). This means that now 5 MiB of blocks are unused and wasting space. Eventually, with enough modifications you&apos;d fill up the disk with all this garbage.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/garbage.webp&quot; alt=&quot;Too much garbage&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;50%&quot; /&gt;
&lt;br/&gt;
Too much garbage
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;The operation that cleans up these unreferenced blocks of data is called garbage collection. The difficult part is making sure we don&apos;t garbage collect data that someone is in the middle of writing (before they commit it). At the moment, this is achieved with a process wide lock. Once &lt;a href=&quot;https://ipfs.io&quot;&gt;IPFS&lt;/a&gt; implements &lt;a href=&quot;https://github.com/ipfs/notes/issues/106&quot;&gt;native transactions&lt;/a&gt; we can remove this global lock and get much better throughput.&lt;/p&gt;
&lt;p&gt;The next addition was &lt;em&gt;statically compiled native binaries&lt;/em&gt;. Until now, to run Peergos yourself you had to independently install Java, which is ~100 MiB. This is an extra barrier that makes it harder to use, and which some people aren&apos;t willing to do. The native builds:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;are smaller in total size (32 MiB compared to a 13 MiB jar plus a 100 MiB JVM);&lt;/li&gt;
&lt;li&gt;use much less RAM than a full JVM;&lt;/li&gt;
&lt;li&gt;start much faster than a JVM (4 ms compared to 660 ms).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The last feature in particular enables us to have an interactive command line interface which doesn&apos;t require running a daemon. We&apos;ll be writing more about this soon! The only negative of native image builds is we don&apos;t yet have &lt;a href=&quot;https://github.com/oracle/graal/issues/291&quot;&gt;reproducible builds&lt;/a&gt; for it.&lt;/p&gt;
&lt;p&gt;The final feature in this release is support for using an &lt;em&gt;S3 compatible&lt;/em&gt; service for data storage instead of the local hard disk.&lt;/p&gt;
&lt;p&gt;As well as all these new features we&apos;ve fixed a host of bugs in both the server and the client. So head on over to &lt;a href=&quot;https://peergos.net&quot;&gt;peergos.net&lt;/a&gt; and check it out!&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Applications on Peergos</title>
        <link href="https://peergos.org/posts/applications" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/applications</id>
        <published>2019-08-20T00:00:00+01:00</published>
        <updated>2019-08-20T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;They&apos;re here - the first apps for Peergos!&lt;/p&gt;
&lt;p&gt;The first application we&apos;ve made available is a read-only viewer for PDF files.
This is a super-simple app which adds very useful functionality to Peergos. Now
you can securely and privately read PDF files within Peergos.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/pdf-viewer.webp&quot; alt=&quot;PDF Viewer&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;80%&quot; /&gt;
&lt;br/&gt;
PDF Viewer
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;The second app we&apos;ve enabled is an editor for text or code. We support plain
text, markdown, and major programming languages like Java, Go, Rust,
Javascript, HTML, etc. This is huge! You can use the text editor as a secure
password manager, a to do list and more!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/editor.png&quot; alt=&quot;Editor&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;80%&quot; /&gt;
&lt;br/&gt;
Text/Markdown/Code editor
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;These great new features are made possible by a technique we&apos;ve recently
discovered. The key component is a sandboxed iframe. Browsers now let you lock
down code in an iframe so that it can&apos;t communicate to the outside world (i.e. can&apos;t
make AJAX requests) and is totally isolated from the parent web page. The
isolation provided by the sandboxed iframe is absolutely critical to us because
when you are logged in, your keys are stored in memory and must be protected
from any potentially malicious code. We can run untrusted code in a sandboxed
iframe which only lets you render HTML, CSS, run Javascript, and send and
receive specific messages to and from the parent. This messaging API keeps
privileged code and keys separate from the application running inside the
iframe.&lt;/p&gt;
&lt;p&gt;For the PDF viewer, we simply imported
&lt;a href=&quot;https://github.com/mozilla/pdf.js/&quot;&gt;pdf.js&lt;/a&gt; from Mozilla and implemented
a one-way message from the external context which sends the content of the PDF
to render. For the text editor, we used a great library called
&lt;a href=&quot;https://github.com/codemirror/codemirror&quot;&gt;Codemirror&lt;/a&gt;. This app
required a slightly more complicated protocol than the one-way message
system of the PDF viewer. We just needed a message to send the modified content
back to the external context, and the privileged code could then save the
modified file contents.&lt;/p&gt;
&lt;p&gt;One of our goals has been to enable third party applications inside Peergos.
These would be apps which you can choose to install and grant permissions to
using the strong authentication, encryption and access control in Peergos, but
which run in a strict sandbox. Eventually we want to allow users to edit HTML
and Javascript files directly in a folder in Peergos and declare it as an
application. This would give users a live editing environment, easy publishing,
and &lt;em&gt;auditable proofs&lt;/em&gt; of the authorship of apps. You could even host your
website directly in Peergos and edit it in place!&lt;/p&gt;
&lt;p&gt;Before we open up the sandbox to truly untrusted apps, there is one
prerequisite. Currently, browsers don&apos;t put sandboxed iframes into a different
operating system process, which is necessary to be fully protected from CPU
vulnerabilities such as Spectre or Meltdown. Both Firefox and Chrome are in
the process of moving iframes to separate processes and once that lands, we
can enable 100% safe sandboxes for Peergos applications!&lt;/p&gt;
&lt;p&gt;In the meantime we can use it to curate semi-trusted apps like the PDF viewer
and text editor. We&apos;d love to hear what you use the text editor for!&lt;/p&gt;
&lt;p&gt;Happy Peergossing!&lt;/p&gt;
&lt;p&gt;-The Peergos team&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Fast seeking and encrypted history</title>
        <link href="https://peergos.org/posts/fast-seeking" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/fast-seeking</id>
        <published>2019-08-01T00:00:00+01:00</published>
        <updated>2019-08-01T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Another week, another set of cool new Peergos features. We&apos;ve been hard at work and wanted to tell you about our latest new features: super fast seeking within a file, encrypted history (fix the back button), and storage usage and quota display.&lt;/p&gt;
&lt;p&gt;Imagine you were watching a long movie in Peergos using our built in streaming video player, and wanted to skip ahead to where you left off last time, around two hours in. Previously this involved downloading the encrypted metadata for every 5MiB chunk of the file (a few network requests), decrypting the location of the next chunk, and repeating this until you reach the desired offset. The links between the chunks are encrypted so that the outside world (or the server) can&apos;t deduce the size of your files. This was SLOOOOOW. To seek a gigabyte or so in took about 5 minutes, or more depending on your internet connection latency! No one wants to wait around that long. so we came up with a new scheme for deterministic, but still private subsequent chunk locations. Before this change each chunk location was 32 random bytes. In the new scheme we calculate the location of a subsequent chunk as the following, where the secret is 32 random bytes that are stored in the encrypted metadata of the first chunk of the file:&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;b&gt;next location = sha256 hash(current location + secret)&lt;/b&gt;&lt;br/&gt;
How we now calculate the locations of later parts of a file
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;This means that to seek ahead we don&apos;t need to do &lt;em&gt;any&lt;/em&gt; IO at all. We just do a bunch of hashing locally. This is ridiculously fast and doesn&apos;t leak to the world the connections between your chunks. We can now seek many gigabytes into a file in about 5s, which is mostly the time to retrive the eventual chunk of the file.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;/p&gt;
&lt;video src=&quot;/theme/video/mind-blown.mp4&quot; width=&quot;400px&quot; controls=&quot;true&quot;&gt;&lt;/video&gt;
&lt;p&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
http://localhost:8000/#{%22nonce%22:%22hl6U6X/ytjRGT+pi5wmJFq...,%22ciphertext%22:%22oK9JAGotzDOELvIon...}
&lt;br/&gt;
A URL with the encrypted path in the fragment.
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;The second feature this week is encrypted history. Until now, if you press the browser back button you get logged out of Peergos. Super annoying! Now, every time you change directory we store the path, padded and encrypted, in the url fragment. If we didn&apos;t encrypt it then there&apos;d be a log of every directory you visited in your browser history. The other requirement is that we catch changes to the url (e.g. caused by pressing the back button) and try to decrypt and interpet the resulting path. This makes navigation much more intuitive.&lt;/p&gt;
&lt;p&gt;We also add to the history if you open a file in Peergos, and if you log in through one of these links then we will restore you to the correct directory, and open any file you had open. This allows you to store &amp;quot;deep bookmarks&amp;quot; to things in Peergos which don&apos;t reveal anything to someone who get&apos;s access you your bookmarks!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/peergos-usage.png&quot; alt=&quot;Space usage display&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;400px&quot; height=&quot;20%&quot; /&gt;
&lt;br/&gt;
Space usage display
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;The third feature is a display of your current space usage and allowance. This lets you see at a glance how close to your limit you are, and you can request more from the admin for your storage node. That could be a friend who&apos;s running a Peergos server for you and gives you more storage for free. Or later down the line we will add the ability for a hosting provider to charge money for storage. After you&apos;ve requested more storage an admin can approve it next time they log in.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/peergos-request-storage.png&quot; alt=&quot;Request more space&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;400px&quot; height=&quot;20%&quot; /&gt;
&lt;br/&gt;
Request more space
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy Peergossing!&lt;/p&gt;
&lt;p&gt;-The Peergos team&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>IPFS Camp, new features</title>
        <link href="https://peergos.org/posts/ipfs-camp" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/ipfs-camp</id>
        <published>2019-07-16T00:00:00+01:00</published>
        <updated>2019-07-16T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;At Peergos we care deeply about your privacy and security online. We are super-excited to be building the future of the web where individuals have total control over their data, and who can see it. This is why we prioritised getting a full &lt;a href=&quot;https://peergos.org/blog#security_audit_june_2019_&quot;&gt;security audit&lt;/a&gt; and why we continue to build a privacy-first platform where you grant applications and people access only to the data you want them to have.&lt;/p&gt;
&lt;p&gt;Recently we attended the inaugural &lt;a href=&quot;https://camp.ipfs.io&quot;&gt;IPFS camp&lt;/a&gt; organised by &lt;a href=&quot;https://protocol.ai&quot;&gt;Protocol labs&lt;/a&gt; from 27th-30th June. Set in magnificent surroundings in the Barcelonian hills, the situation was primed for productivity with 160 pioneers of the decentralised web gathered to meet, discuss, learn and solve. The schedule was packed, with core courses, electives, lightning talks, deep dives, unconf sessions and a sci-fi fair. It was a great experience and hugely useful for Peergos and our mission.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/deepdive.jpeg&quot; alt=&quot;The deepdive trophy&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;200px&quot; height=&quot;20%&quot; /&gt;
&lt;br/&gt;
Best deep dive trophy
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Our team member Jonathan and his group won the best deep dive, for a product analysis of Peergos. This deep dive was a guided user testing of Peergos which resulted in a ton of feedback and suggestions. One of the suggestions was to implement friend verification in person or over the phone via a qr code or safety number. In fact, one member of the group said they would pay right now for Peergos if it had this feature! So now, a few weeks later, we present friend verification! It works directly from the browser using the webcam, including on mobile. Just scan your friends qr code in person for an added layer of confidence!&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/verification.png&quot; alt=&quot;Verification&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;300px&quot; height=&quot;50%&quot; /&gt;
&lt;br/&gt;
QR code based verification of friends
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;We already have many defenses against a man-in-the-middle attack including mirrored append-only certificate transparency for all user identities, but this adds another layer for the hyper paranoid users.&lt;/p&gt;
&lt;p&gt;Another suggestion from our deep dive was that uploading a folder should work. We&apos;ve attempted this in the past but hit problems with the browser APIs. However, now we have solved the problems and you can drag and drop a folder into Peergos and it will recusively upload all its contents!&lt;/p&gt;
&lt;p&gt;We also had a great deep dive session with &lt;a href=&quot;https://twitter.com/berty&quot;&gt;Berty&lt;/a&gt; on a secure decentralised group chat protocol. We were investigating if &lt;a href=&quot;https://messaginglayersecurity.rocks&quot;&gt;Messaging Layer Security&lt;/a&gt; can be adapted to work in a more decentralised setting. Berty also &lt;a href=&quot;https://github.com/ipfs/camp/raw/master/LIGHTNING_TALKS/ipfscamp2019-lightningtalk-bluetoothle.pdf&quot;&gt;presented&lt;/a&gt; their implementation of a &lt;a href=&quot;https://libp2p.io&quot;&gt;libp2p&lt;/a&gt; transport over bluetooth low energy. Very cool!&lt;/p&gt;
&lt;p&gt;Want to be part of the future? Create an account on &lt;a href=&quot;https://peergos.net/?signup=true&quot;&gt;https://peergos.net&lt;/a&gt; or self-host your own &lt;a href=&quot;https://github.com/Peergos/Peergos/blob/master/README.md#usage---self-hosting&quot;&gt;private personal datastore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time, happy Peergossing!&lt;/p&gt;
&lt;p&gt;-The Peergos team&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Alpha Release</title>
        <link href="https://peergos.org/posts/alpha-release" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/alpha-release</id>
        <published>2019-06-20T00:00:00+01:00</published>
        <updated>2019-06-20T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;The time you&apos;ve all been waiting for has arrived... The &lt;em&gt;Peergos alpha&lt;/em&gt; is now officially open! You can now have your own private shareable space online.&lt;/p&gt;
&lt;p&gt;We have a strictly limited number of accounts on our alpha available for free with an initial 200MB of storage, so get in fast. All we ask in return is that you use it and tell us what we can improve. You can do this in Peergos itself using the feedback button, on &lt;a href=&quot;https://reddit.com/r/peergos&quot;&gt;Reddit&lt;/a&gt;, or via &lt;a href=&quot;mailto:feedback@peergos.org&quot;&gt;email&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/peergos&quot;&gt;Twitter&lt;/a&gt;. If you run out of space in Peergos then just message us and we&apos;ll increase your storage quota, subject to availability.&lt;/p&gt;
&lt;p&gt;Some things to bear in mind:&lt;br/&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; We haven&apos;t had an external security audit (coming soon), so we advise you not to store anything sensitive in Peergos yet.&lt;/li&gt;&lt;li&gt; For now, we recommend Chrome for files larger than 50MB. We&apos;d love to be able to recommend Firefox, but they haven&apos;t implemented a [critical feature](https://bugzilla.mozilla.org/show_bug.cgi?id=1474543) we need to safely stream from encrypted data.&lt;/li&gt;&lt;li&gt; There are still a lot of rough edges and things that can be optimised, but we wanted to get it out there and start getting feedback on what people actually want, now that the foundations are in place. &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;You can &lt;a href=&quot;https://peergos.net?signup=true&quot;&gt;sign up to the alpha here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy sharing!&lt;/p&gt;
&lt;p&gt;The Peergos Team&lt;br/&gt;&lt;br/&gt;
Twitter: &lt;a href=&quot;https://twitter.com/peergos&quot;&gt;@peergos&lt;/a&gt;&lt;br/&gt;
Reddit: &lt;a href=&quot;https://reddit.com/r/peergos&quot;&gt;https://reddit.com/r/peergos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/logo.png&quot; alt=&quot;Peergos&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;20%&quot; height=&quot;20%&quot; /&gt;
&lt;/center&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Security Audit</title>
        <link href="https://peergos.org/posts/security-audit" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/security-audit</id>
        <published>2019-06-12T00:00:00+01:00</published>
        <updated>2019-06-12T00:00:00+01:00</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;Thanks to some very generous support from &lt;a href=&quot;https://protocol.ai/&quot;&gt;Protocol Labs&lt;/a&gt; we have had our first security audit! We contracted the firm &lt;a href=&quot;https://cure53.de/&quot;&gt;Cure53&lt;/a&gt; to give us a large scale security asessment of our cryptography, protocols, architecture and code. We&apos;re extremely pleased to be able to announce that no fundamental architectural or cryptographic problems were found, and all the issues that were found have been fixed.&lt;/p&gt;
&lt;p&gt;This means that you can rest assured that your data is safe with Peergos.&lt;/p&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://cure53.de/pentest-report_peergos.pdf&quot;&gt;full report here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/logo.png&quot; alt=&quot;Peergos&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;20%&quot; height=&quot;20%&quot; /&gt;
&lt;/center&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <title>Development update</title>
        <link href="https://peergos.org/posts/dev-update" rel="alternate" type="text/html"/>
        <id>https://peergos.org/posts/dev-update</id>
        <published>2019-02-28T00:00:00Z</published>
        <updated>2019-02-28T00:00:00Z</updated>
        <author>
            <name>Peergos team</name>
        </author>
        <content type="html">&lt;p&gt;&lt;em&gt;This is our first development update since we started, in July 2013. For most of that period we&apos;ve been working on Peergos for free in our spare time. Everything we do is &lt;a href=&quot;https://github.com/peergos/peergos&quot;&gt;open source&lt;/a&gt; and pro bono - If you would like to support our development then please make a &lt;a href=&quot;https://liberapay.com/peergos&quot;&gt;recurring donation of less than 100 euros per week&lt;/a&gt; or a &lt;a href=&quot;https://donorbox.org/peergos&quot;&gt;larger one off donation&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The browser&apos;s capabilities have come a long way since we started. Things that we can do now were not possible 5 years ago. The Inter-Planetary File system (&lt;a href=&quot;https://ipfs.io&quot;&gt;IPFS&lt;/a&gt;) has come a long way in solving many of the peer-to-peer networking problems and laying a solid structural foundation to build on. That&apos;s why very early on after IPFS started we switched from our own networking and distributed hash table to IPFS, allowing us to focus on our core principles of privacy and security.&lt;/p&gt;
&lt;p&gt;Thanks to some very generous support from &lt;a href=&quot;https://protocol.ai/&quot;&gt;Protocol Labs&lt;/a&gt; (the initial creators of IPFS) we have been able to accelerate development recently. We&apos;ve released a bunch of cool new features and are much closer to our public alpha. Let&apos;s go through a few of the big ones. You can see the rest in more detail in our &lt;a href=&quot;https://book.peergos.org&quot;&gt;book&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;decentralization&quot;&gt;Decentralization&lt;/h3&gt;
&lt;p&gt;The first new feature is proper decentralization. Now you can self host your own Peergos instance and transparently interact with users on other servers, whilst being independent of the domain name system (DNS) and the SSL certificate authorities (central points of failure outside our control). You can even log in to your Peergos account through someone else&apos;s Peergos server. The Peergos interface can actually be entirely self hosted from within IPFS itself (i.e. you can log in through a standard ipfs instance rather than a Peergos instance)! This was all achieved with IPFS p2p streams. p2p streams are a new feature in IPFS which let you create a tcp socket between any two IPFS instances. This stream is end-to-end encrypted with TLS 1.3. Like all other IPFS connections, this stream will tunnel through NATs and firewalls transparently.&lt;/p&gt;
&lt;p&gt;We implemented a new http endpoint on the IPFS gateway which allows you to proxy a http request to any target IPFS instance (who is listening) using these p2p streams.&lt;/p&gt;
&lt;p&gt;This new endpoint is accessed through the gateway (after enabling it - it&apos;s an experimental feature for now) at:&lt;/p&gt;
&lt;p&gt;http://locahost:8080&lt;b&gt;/p2p/$ipfs-node-id/http/$path&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;For each such request, IPFS will open a p2p stream to $ipfs-node-id and proxy the request to it with a path of $path. Note that the $ipfs-node-id is the hash of the IPFS node&apos;s public key. How this works is illustrated below. The beauty of this http endpoint is you don&apos;t need to manually open p2p streams for every different endpointdestination, IPFS handles that for you automatically.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/proxy.svg&quot; alt=&quot;Proxying requests&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;90%&quot; height=&quot;90%&quot; /&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Using this key ingredient, we can separate out each user&apos;s data into their own server. Most of the data is already in IPFS, but a user&apos;s storage server is responsible for pinning it, and for storing the mutable pointers (our equivalent of IPNS), and pending follow requests. This means the only centralized component is the pki, which stores mappings from username to public identity key, and public storage server key. The job of the pki server is to ensure unique usernames and thus it is logically centralized, but we take various efforts to mitigate the effect of this. For example the pki is mirrored on every Peergos server. This has threefold benefits: first it allows users to do private lookups for friends&apos; public keys without announcing to the network who they are looking up; second, it makes the whole system much more scalable - you only need to contact the real pki when you are signing up, or changing your identity or storage server; and third it improves resiliency, if the pki server were to permanently be taken down the network could move to a new one without any loss of data. The pki data itself is stored in IPFS as an append only data structure in a compressed hash array mapped trie (champ).&lt;/p&gt;
&lt;h3 id=&quot;granting-write-access&quot;&gt;Granting write access&lt;/h3&gt;
&lt;p&gt;We&apos;ve had the ability to grant read access for years, but only this year have we finally implemented granting write access to other users. Every write is signed by a signing keypair. Initially you only have one signing keypair for your entire filestystem, which means that to only grant write access to a subtree, it needs to be moved to a new signing keypair. To explain how this works we&apos;re going to take a few steps back. Every directory or 5 MiB section (chunk) of a file requires a unique &lt;a href=&quot;https://en.wikipedia.org/wiki/Capability-based_security&quot;&gt;capability&lt;/a&gt; to access it consisting of:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;(owner, signer, label, read base key, write base key)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Here the owner and signer are (hashes of) public signing keys, label is a random 32 byte label, and the read and write base keys are symmetric keys. If someone has the first 4, which amount to a location and a key, then they can read the file or folder that it points to. If they also have the write base key, then they can also make modifications.&lt;/p&gt;
&lt;p&gt;From a network visible point of view, every signing key pair points to a champ root (by signing the root). This champ is just a look up from the label to the value, which is a cryptree node. You can read more about cryptree in our &lt;a href=&quot;https://book.peergos.org/security/cryptree.html&quot;&gt;book&lt;/a&gt;, or the &lt;a href=&quot;https://raw.githubusercontent.com/ianopolous/Peergos/master/papers/wuala-cryptree.pdf&quot;&gt;original paper&lt;/a&gt; describing it. If the thing pointed to is a file, then the cryptree node itself will have merkle links to the encrypted fragments of the chunk. Remember that merkle links are just a hash that points to another ipfs object. This is illustrated below.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img src=&quot;/theme/img/blog/champ.svg&quot; alt=&quot;Champ&quot; id=&quot;id&quot; class=&quot;class&quot; width=&quot;90%&quot; height=&quot;90%&quot; /&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;When you grant write access to a file or folder then you are just revealing the write base key to them. This enables them to extract the private signing key and thus make modifications. Initially your entire filesystem is under the same signing key pair. This means were we to naively grant write access by sharing this key then the recipient could delete (though not read) all your files. To avoid this we first move the file or directory to which we want to grant write access to a new signing key pair. This allows us to only grant the friend write access to the particular part of our filesystem we want to share. Voila!&lt;/p&gt;
&lt;p&gt;If you grant write access to a folder, then that means that the recipient can upload new files or make new directories inside that folder, or delete all the contents. Granting write access to an individual file means the recipient can only modify that file.&lt;/p&gt;
&lt;h3 id=&quot;future-work&quot;&gt;Future work&lt;/h3&gt;
&lt;p&gt;We have lots of work in the pipeline, so stay tuned! These include an in Peergos text editor, for a google docs like experience with collaborative editing, a secure messaging system inside Peergos and a sandbox and API for third-party applications inside Peergos.&lt;/p&gt;</content>
    </entry>
</feed>
