<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Yarmo - cryptography</title>
    <subtitle>Blog of an Open Source developer</subtitle>
    <link rel="self" type="application/atom+xml" href="https://yarmo.eu/tags/cryptography/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://yarmo.eu"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2020-07-23T14:08:02+00:00</updated>
    <id>https://yarmo.eu/tags/cryptography/atom.xml</id>
    <entry xml:lang="en">
        <title>Keyoxide and XMPP + OMEMO</title>
        <published>2020-07-23T14:08:02+00:00</published>
        <updated>2020-07-23T14:08:02+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://yarmo.eu/blog/keyoxide-xmpp-omemo/"/>
        <id>https://yarmo.eu/blog/keyoxide-xmpp-omemo/</id>
        
        <content type="html" xml:base="https://yarmo.eu/blog/keyoxide-xmpp-omemo/">&lt;h2 id=&quot;XMPP&quot;&gt;XMPP&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;xmpp.org&#x2F;&quot;&gt;XMPP&lt;&#x2F;a&gt; is an open messaging protocol that not only drives a &lt;strong&gt;thriving secure communication ecosystem for the privacy-minded&lt;&#x2F;strong&gt;, but also handles the messages sent by platforms like WhatsApp and Zoom. Knowingly or not, you have most likely used XMPP at some point in your life.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;For the rest of this post, we will not take into account services like WhatsApp and Zoom as their platforms are closed off from all other platforms even though they use the same XMPP protocol.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;That &lt;strong&gt;ecosystem for the privacy-minded&lt;&#x2F;strong&gt; consists of libraries for developers, server applications for the tech-savvy service providers and clients like &lt;a href=&quot;https:&#x2F;&#x2F;dino.im&#x2F;&quot;&gt;Dino&lt;&#x2F;a&gt; (Linux), &lt;a href=&quot;https:&#x2F;&#x2F;gajim.org&#x2F;&quot;&gt;Gajim&lt;&#x2F;a&gt; (Windows, Mac, Linux) and &lt;a href=&quot;https:&#x2F;&#x2F;conversations.im&#x2F;&quot;&gt;Conversations&lt;&#x2F;a&gt; (Android) for everyone.&lt;&#x2F;p&gt;
&lt;p&gt;Because there is no single server or client to rule them all, we call this is a &lt;em&gt;decentralized&lt;&#x2F;em&gt; network. I could use a different server and a different client than you do, but we would still be able to communicate with each other. Also, any server or client could cease to exist the next day without impacting the rest of the network.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Care_to_join_the_XMPP_ecosystem?&quot;&gt;Care to join the XMPP ecosystem?&lt;&#x2F;h2&gt;
&lt;p&gt;Joining the XMPP ecosystem is as simple as making an account on a server and logging in using any XMPP-compatible client. But which server? Which client?&lt;&#x2F;p&gt;
&lt;p&gt;While not the focus of this post, here is a &lt;a href=&quot;https:&#x2F;&#x2F;xmpp-servers.404.city&#x2F;&quot;&gt;list provided by 404.city&lt;&#x2F;a&gt; and a &lt;a href=&quot;https:&#x2F;&#x2F;list.jabber.at&#x2F;&quot;&gt;list provided by jabber.at&lt;&#x2F;a&gt; of XMPP servers.&lt;&#x2F;p&gt;
&lt;p&gt;Notable mention for &lt;a href=&quot;https:&#x2F;&#x2F;404.city&#x2F;&quot;&gt;404.city&lt;&#x2F;a&gt; itself. Not sponsored. Just a fan.&lt;&#x2F;p&gt;
&lt;p&gt;With regards to clients, the three mentioned above should get you started. Need a different client? Have a look at this &lt;a href=&quot;https:&#x2F;&#x2F;xmpp.org&#x2F;software&#x2F;clients.html&quot;&gt;list provided by xmpp.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;End-to-end_encryption:_OMEMO&quot;&gt;End-to-end encryption: OMEMO&lt;&#x2F;h2&gt;
&lt;p&gt;XMPP communication can be end-to-end encrypted with &lt;a href=&quot;https:&#x2F;&#x2F;conversations.im&#x2F;omemo&#x2F;&quot;&gt;OMEMO&lt;&#x2F;a&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;xmpp.org&#x2F;extensions&#x2F;xep-0384.html&quot;&gt;XEP-0384&lt;&#x2F;a&gt;), the easiest and most common of &lt;a href=&quot;https:&#x2F;&#x2F;wiki.404.city&#x2F;en&#x2F;XMPP_client_encryption&quot;&gt;XMPP-compatible end-to-end encryption schemes&lt;&#x2F;a&gt;. Verifying OMEMO fingerprints is essential to trust your communication and keep it safe from Man-in-the-Middle attacks.&lt;&#x2F;p&gt;
&lt;p&gt;Each XMPP client you use will have its own OMEMO key, the content of which remains secured on your device but a &amp;quot;fingerprint&amp;quot; of which can be made public without a problem. These fingerprints are used to identify the different clients that have logged in on your XMPP account.&lt;&#x2F;p&gt;
&lt;p&gt;If you wish to secure your communication with OMEMO, make sure to choose a &lt;a href=&quot;https:&#x2F;&#x2F;omemo.top&#x2F;&quot;&gt;client with full support on this website&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;OMEMO_and_trust&quot;&gt;OMEMO and trust&lt;&#x2F;h2&gt;
&lt;p&gt;When you talk with someone over XMPP and you want to guarantee all communication is secured, it is recommended to use a different form of communication to compare and trust each others fingerprints. Ideally, you would meet in person and scan QR codes, a handy function of the &lt;strong&gt;Conversations&lt;&#x2F;strong&gt; app.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;XMPP_identity_proofs_and_Keyoxide&quot;&gt;XMPP identity proofs and Keyoxide&lt;&#x2F;h2&gt;
&lt;p&gt;As you can see, trusting OMEMO keys is an essential step in the process of ensuring communication is secure. Fortunately, &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide&lt;&#x2F;a&gt; can assist you in that process.&lt;&#x2F;p&gt;
&lt;p&gt;As of &lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;keyoxide&#x2F;web&#x2F;releases&#x2F;tag&#x2F;0.4.0&quot;&gt;version 0.4&lt;&#x2F;a&gt;, Keyoxide generates QR codes for all &lt;strong&gt;verified&lt;&#x2F;strong&gt; XMPP accounts it detects. This makes it easy to add new contacts if your &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;xmpp&quot;&gt;XMPP identity proof&lt;&#x2F;a&gt; looks like this:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#212733;color:#ccc9c2;&quot;&gt;&lt;code&gt;&lt;span&gt;proof@metacode.biz=xmpp:username@domain.org
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Scan the resulting QR code on a Keyoxide profile page in the &lt;strong&gt;Conversations&lt;&#x2F;strong&gt; app and the contact is added. But the OMEMO keys are not yet trusted. Let&#x27;s solve that!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Integrating_OMEMO_in_the_XMPP_identity_proof&quot;&gt;Integrating OMEMO in the XMPP identity proof&lt;&#x2F;h2&gt;
&lt;p&gt;It is also possible to add a more advanced &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;xmpp&quot;&gt;XMPP identity proof&lt;&#x2F;a&gt; to your OpenPGP key that includes the OMEMO fingerprints:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#212733;color:#ccc9c2;&quot;&gt;&lt;code&gt;&lt;span&gt;proof@metacode.biz=xmpp:user@domain.org?omemo-sid-123456789=A1B2C3D4E5F6G7H8I9...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Obtaining the correct URI for the proof can be difficult when doing so manually. Fortunately, this can be assisted by the &lt;strong&gt;Conversations&lt;&#x2F;strong&gt; app. As you can tell, using the &lt;strong&gt;Conversations&lt;&#x2F;strong&gt; app brings a ton of advantages.&lt;&#x2F;p&gt;
&lt;p&gt;In the main menu of that app, press &lt;strong&gt;Manage accounts &amp;gt; [your account] &amp;gt; Share &amp;gt; Share as XMPP URI&lt;&#x2F;strong&gt; and add the resulting URI to your key using &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;xmpp&quot;&gt;this Keyoxide guide&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Scan the resulting QR code on a Keyoxide profile page and not only is the contact added, their OMEMO fingerprints are also fully trusted and verified.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Why_trust_the_Keyoxide_identity_proof?&quot;&gt;Why trust the Keyoxide identity proof?&lt;&#x2F;h2&gt;
&lt;p&gt;Anyone can add any XMPP proof to their OpenPGP key, whether they own it or not. So why trust the identity proof on Keyoxide?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;STEP 1&lt;&#x2F;strong&gt; The QR code is only shown if a XMPP identity proof is verified. Verifying a XMPP account requires the holder of said account to add a small line of code to their XMPP bio &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;xmpp&quot;&gt;as described in this guide&lt;&#x2F;a&gt;. Only a person with access to both the OpenPGP private key and the XMPP account can verify that XMPP account.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;STEP 2&lt;&#x2F;strong&gt; While Keyoxide assists as much as possible with trusting the right proofs, a critical mind is always an asset when dealing with trusting online identities, especially when securing your communication. Do you recognize any other proofs on this person&#x27;s profile page? Is this proof verified? If so, you can safely assume that the person who holds the OpenPGP key also has access to this &amp;quot;other proof&amp;quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Combining the two steps above, you can trust that you are talking to the right person and verifying the right OMEMO fingerprints.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Example&quot;&gt;Example&lt;&#x2F;h2&gt;
&lt;p&gt;You are reading this post on &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&quot;&gt;yarmo.eu&lt;&#x2F;a&gt;. Whether or not you trust me, I&#x27;m telling you that my OpenPGP fingerprint is:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#212733;color:#ccc9c2;&quot;&gt;&lt;code&gt;&lt;span&gt;9f0048ac0b23301e1f77e994909f6bd6f80f485d
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So you visit &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;9f0048ac0b23301e1f77e994909f6bd6f80f485d&quot;&gt;keyoxide.org&#x2F;9f0048ac0b23301e1f77e994909f6bd6f80f485d&lt;&#x2F;a&gt;. Indeed, whoever holds the key with that fingerprint also owns the &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&quot;&gt;yarmo.eu&lt;&#x2F;a&gt; domain.&lt;&#x2F;p&gt;
&lt;p&gt;Now, you scroll down until you reach the XMPP proof for &lt;strong&gt;yarmo@404.city&lt;&#x2F;strong&gt;. You read that the XMPP account is verified. Ergo, whoever holds the key with that fingerprint also has access to that XMPP account.&lt;&#x2F;p&gt;
&lt;p&gt;Final conclusion: whoever owns the &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&quot;&gt;yarmo.eu&lt;&#x2F;a&gt; domain also has access to the &lt;strong&gt;yarmo@404.city&lt;&#x2F;strong&gt; XMPP account. If you wish to talk with me securely, scan the QR code and be certain that you have just added me as a contact, and that are you verifying the right OMEMO fingerprints to ensure secure and fully encrypted communication between us.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Future of Online Identity is Decentralized</title>
        <published>2020-07-12T16:23:31+00:00</published>
        <updated>2020-07-12T16:23:31+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://yarmo.eu/blog/future-online-identity-decentralized/"/>
        <id>https://yarmo.eu/blog/future-online-identity-decentralized/</id>
        
        <content type="html" xml:base="https://yarmo.eu/blog/future-online-identity-decentralized/">&lt;h2 id=&quot;Online_identity&quot;&gt;Online identity&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Online_identity&quot;&gt;Online identity&lt;&#x2F;a&gt; refers to the concept of &amp;quot;being&amp;quot; in the digital world. As an internet user, you exist. You create accounts on websites. You write on social media and blogs. You post photos. All this online activity has in common that one and the same person performed these actions; it defines your &amp;quot;online identity&amp;quot;.&lt;&#x2F;p&gt;
&lt;p&gt;However, your &amp;quot;online identity&amp;quot; is not &lt;em&gt;per se&lt;&#x2F;em&gt; representative of your &amp;quot;social identity&amp;quot; in the physical world.&lt;&#x2F;p&gt;
&lt;p&gt;You may choose to use your own name or a pseudonym. You may choose to publish personally identifiable information or not. You may choose to remain truthful to your social identity or deceive. In short, you may choose for authenticity or for anonymity.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Authenticity_versus_anonymity&quot;&gt;Authenticity versus anonymity&lt;&#x2F;h2&gt;
&lt;p&gt;Authenticity and anonymity aren&#x27;t mutually exclusive and that is the beauty of the internet. In the physical realm, you are (mostly) limited to a single social identity. In the digital space, there are no such restrictions. While you can&#x27;t embody multiple persons in the offline world, you can have several identities online. In fact, you can even have multiple accounts on the same platform, opting for a different balance between authenticity and anonymity for each one of them.&lt;&#x2F;p&gt;
&lt;p&gt;The anonymity has its downsides, creating psychological artifacts like &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Online_disinhibition_effect&quot;&gt;online disinhibition&lt;&#x2F;a&gt; and facilitating &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cyberbullying&quot;&gt;cyberharassment&lt;&#x2F;a&gt;. However, even though we are far from completely overcoming these challenges, the internet that allows us to remain anonymous is still the one we should want and fight for.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Consolidation_of_identity_and_internet_corporations&quot;&gt;Consolidation of identity and internet corporations&lt;&#x2F;h2&gt;
&lt;p&gt;Removing the possibility for anonymity could solve the problem of online toxicity. Large internet corporations like Google and Facebook allow all to create an account on condition that some personally identifiable information is revealed, usually a phone number.&lt;&#x2F;p&gt;
&lt;p&gt;The benefit is that it deters most from repeatably creating new accounts when older accounts have been flagged or banned due to improper behavior. These companies gain the function of &amp;quot;identity provider&amp;quot;: they manage your online identity that can be used to login in different locations of the internet. We all know many websites that offer a &amp;quot;Google login&amp;quot; or &amp;quot;Facebook login&amp;quot;.&lt;&#x2F;p&gt;
&lt;p&gt;But there is a problem: handling the entire online identity of a single person is too much responsibility for any corporation or organization, especially if it is in their interest to gain intimate individual knowledge and sell it (Google) or use it to manipulate moods and influence decision making (Facebook).&lt;&#x2F;p&gt;
&lt;p&gt;That phone number that was once used to prevent online toxicity is now the first of many pieces of personally identifiable information that these corporations will seek and use to figure out who you are.&lt;&#x2F;p&gt;
&lt;p&gt;&amp;quot;You have nothing to hide&amp;quot;? Great. The internet corporations will still make money hand over fist by selling your personality, your preferences, your buying patterns and your vote. And not just yours. That of entire populations.&lt;&#x2F;p&gt;
&lt;p&gt;Know that profits are just the tip of the iceberg. Governments all around the world are also interested in knowing what their citizens think, say and do for very different motives.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Going_decentralized&quot;&gt;Going decentralized&lt;&#x2F;h2&gt;
&lt;p&gt;The solution is relatively simple. When you create a new account and get to choose between &amp;quot;Google login&amp;quot;, &amp;quot;Facebook login&amp;quot; and &amp;quot;Email login&amp;quot;, pick &amp;quot;Email login&amp;quot;.&lt;&#x2F;p&gt;
&lt;p&gt;The benefit of not giving away any more personal data and tracking possibilities outweigh the inconvenience of having to fill in your email address and a password, especially when using a password manager. As tempting as the alternative is, making these changes will improve your life and ultimately, when enough people join these efforts, that of the world population.&lt;&#x2F;p&gt;
&lt;p&gt;A different problem arises: how to prove online identity when decentralized?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Decentralized_online_identity&quot;&gt;Decentralized online identity&lt;&#x2F;h2&gt;
&lt;p&gt;When you are no longer relying on an identity provider to manage your entire online identity, you lose the one common thing all your accounts on different platforms had: if two accounts on different online platforms are created by the same Google or Facebook account, we can safely assume they belong to the same person.&lt;&#x2F;p&gt;
&lt;p&gt;But this &amp;quot;trust by proxy&amp;quot; is lost when the accounts on those platforms were created without identity provider. And whether authentic or anonymous, it can sometimes be extremely useful to know and trust that separate accounts on the internet belong to the same person, even when not knowing who this person is.&lt;&#x2F;p&gt;
&lt;p&gt;The username is not sufficient to identify accounts across platforms. If you are &amp;quot;Alice&amp;quot; on one website, chances are you might need to be &amp;quot;Alice123&amp;quot; on the next one. And what if someone close to you is contacted by an &amp;quot;Aliss&amp;quot; requesting an amount of money to be transferred because they believe you to be in some sort of trouble? A poor attempt at impersonation, I know… Don&#x27;t worry, a real bad actor will put in more effort and make a much more convincing act.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Proving_decentralized_online_identity&quot;&gt;Proving decentralized online identity&lt;&#x2F;h2&gt;
&lt;p&gt;What if not only your online identity is decentralized, but also the tool to prove said online identity? This would mean that you wouldn&#x27;t need to depend on a single company or entity to prove your identity across platforms. Decentralized identity, decentralized proofs!&lt;&#x2F;p&gt;
&lt;p&gt;Such solutions are already being deployed in industry, for example by firms like &lt;a href=&quot;https:&#x2F;&#x2F;indicio.tech&#x2F;&quot;&gt;Indicio.tech&lt;&#x2F;a&gt; which focus on blockchain technology.&lt;&#x2F;p&gt;
&lt;p&gt;Built for individuals, I recently launched &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide&lt;&#x2F;a&gt; which uses cryptographic keypairs to accomplish decentralized identity verification. While it doesn&#x27;t (and shouldn&#x27;t!) link an account to a person in the physical realm, it links accounts across platforms.&lt;&#x2F;p&gt;
&lt;p&gt;If you trust an account on one platform, you can trust any other account on any other platform as long as they are both verified by &amp;quot;identity proofs&amp;quot; stored in the same keypair. Whether you choose authenticity or anonymity, decentralized identity proofs allow you to build a cross-platform online identity.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s my &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;9f0048ac0b23301e1f77e994909f6bd6f80f485d&quot;&gt;Keyoxide profile&lt;&#x2F;a&gt;. In this case, I link to several &amp;quot;authentic&amp;quot; accounts but I could easily generate a new keypair void of personal data that links to several anonymous accounts. The accounts don&#x27;t need to be authentic to create an online persona.&lt;&#x2F;p&gt;
&lt;p&gt;All the accounts listed in the link above belong to me. No one else could claim these accounts. Here&#x27;s how.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Identity_proofs&quot;&gt;Identity proofs&lt;&#x2F;h2&gt;
&lt;p&gt;An &amp;quot;identity proof&amp;quot; is nothing more than a link to an account A on some platform P stored inside your keypair K. If a &amp;quot;proof verification tool&amp;quot; such as Keyoxide follows this link and discovers some piece of data linking back to keypair K (which is only possible if keypair K and account A on platform P belong to the same person), the account is verified. If this proof verification is done for several accounts on different platforms, it is beyond reasonable doubt that the same person owns said accounts.&lt;&#x2F;p&gt;
&lt;p&gt;No bad actor could claim one of your accounts: the piece of data that links back is specific to your keypair, not the bad actor&#x27;s keypair. And the bad actor also couldn&#x27;t insert a proof inside your keypair as long as your keypair isn&#x27;t compromised. Only you, the owner of the keypair, can add new proofs. But the entire world can read and verify them.&lt;&#x2F;p&gt;
&lt;p&gt;These identity proofs are decentralized because Keyoxide doesn&#x27;t store them, your cryptographic keypair does. Keyoxide simply reads the keys and verifies the proofs. When you remove a proof from your keypair, Keyoxide will no longer have access to it. You own your proofs and your online identity.&lt;&#x2F;p&gt;
&lt;p&gt;In fact, the proofs are readable by everyone and are not specifically designed for Keyoxide. Anyone can use any tool or create new ones to verify these proofs and developers are encouraged to enrich this field with additional tools and services. Let&#x27;s build a decentralized identity ecosystem we can all trust.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Online_identity_beyond_today&#x27;s_internet&quot;&gt;Online identity beyond today&#x27;s internet&lt;&#x2F;h2&gt;
&lt;p&gt;Initiatives like &lt;a href=&quot;https:&#x2F;&#x2F;inrupt.com&#x2F;solid&quot;&gt;Solid&lt;&#x2F;a&gt; by &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tim_Berners-Lee&quot;&gt;Sir Tim Berners-Lee&lt;&#x2F;a&gt; are paving the way for a new internet where all data is owned by the user and shared with platforms with consent and restrictions. This would solve the online identity problem: you get the benefits of a &amp;quot;pseudo centralized&amp;quot; account while maintaining full ownership over all account-related data stored on a decentralized platform. Social media would be allowed to see some data, messaging platforms some other data. But there would still be one single account to rule all the platforms.&lt;&#x2F;p&gt;
&lt;p&gt;On today&#x27;s internet, the best we can do is make fully separated accounts, link them using technologies like decentralized online identity proofs and create our own online personas, with our own open tools that ensure we maintain ownership over them.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Launching Keyoxide.org</title>
        <published>2020-07-01T12:00:00+00:00</published>
        <updated>2020-07-01T12:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://yarmo.eu/blog/keyoxide/"/>
        <id>https://yarmo.eu/blog/keyoxide/</id>
        
        <content type="html" xml:base="https://yarmo.eu/blog/keyoxide/">&lt;p&gt;Today, I&#x27;m excited to launch &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt;, the lightweight and FOSS solution to make basic cryptography operations accessible to regular humans.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;What_is_Keyoxide.org?&quot;&gt;What is Keyoxide.org?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt; offers easy encryption, signature verification and decentralized identity proof verification based on PGP keys while demanding little in-depth knowledge about the underlying encryption program from its users.&lt;&#x2F;p&gt;
&lt;p&gt;This project aims to offer comparable functionality as services like &lt;a href=&quot;https:&#x2F;&#x2F;keybase.io&quot;&gt;Keybase&lt;&#x2F;a&gt; while reducing friction and being more open.&lt;&#x2F;p&gt;
&lt;p&gt;The project is MIT licensed, uses &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;openpgpjs&#x2F;openpgpjs&quot;&gt;openpgpjs&lt;&#x2F;a&gt; and is hosted on &lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;yarmo&#x2F;keyoxide&quot;&gt;Codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Why_only_encryption_and_signature_verification?&quot;&gt;Why only encryption and signature verification?&lt;&#x2F;h2&gt;
&lt;p&gt;These are the operations that are available when only having access to public keys instead of private keys. If you wish to decrypt messages and sign them, you need a keypair. If you have a keypair, you probably have the knowledge to use dedicated tools like the CLI or Kleopatra. And if you do, you probably won&#x27;t be using &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt; directly yourself.&lt;&#x2F;p&gt;
&lt;p&gt;Indeed, if you possess a PGP keypair, &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt; is the tool you send to others to interact with your public key more easily. Allow them to encrypt a message for you, to verify one of your signatures, to verify your online identities using decentralized proofs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;What_are_those_decentralized_identity_proofs_you_keep_mentioning?&quot;&gt;What are those decentralized identity proofs you keep mentioning?&lt;&#x2F;h2&gt;
&lt;p&gt;You know how Keybase allows you to prove you have control over accounts on certain websites and services? A great function! Fortunately for you, this function can be even better and more secure by using &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;openpgp-proofs&quot;&gt;decentralized OpenPGP identity proofs&lt;&#x2F;a&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt; will prove your identity on multiple platforms at the same time and yet, you are not required to make an account to use this function. How is that possible?&lt;&#x2F;p&gt;
&lt;p&gt;Well, it&#x27;s called &lt;em&gt;decentralized&lt;&#x2F;em&gt; for a reason: &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt; doesn&#x27;t hold your proofs, your key does! Any software that can access your public key can verify these proofs for anyone. When better tooling comes around, you could verify those proofs using a mobile app, using a command-line utility, you name it. No single service holds your proof, only you do, stored inside your keypair.&lt;&#x2F;p&gt;
&lt;p&gt;I have written a &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&quot;&gt;guide&lt;&#x2F;a&gt; on how to add a proof for every platform currently supported by this website: &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;dns&quot;&gt;domains&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;lobsters&quot;&gt;Lobste.rs&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;twitter&quot;&gt;Twitter&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;github&quot;&gt;Github&lt;&#x2F;a&gt;, a &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&quot;&gt;bunch more&lt;&#x2F;a&gt; and work is in progress to support even more still. Is your beloved service not in the list? &lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;yarmo&#x2F;keyoxide&quot;&gt;Open an issue or make a PR&lt;&#x2F;a&gt;! Free open-source software FTW!&lt;&#x2F;p&gt;
&lt;p&gt;Oh, that reminds me, any &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;mastodon&quot;&gt;Mastodon&lt;&#x2F;a&gt; instance can be used to prove your identity. Yes, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;keybase&#x2F;keybase-issues&#x2F;issues&#x2F;3385&quot;&gt;any&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;So_how_does_it_compare_to_Keybase?&quot;&gt;So how does it compare to Keybase?&lt;&#x2F;h2&gt;
&lt;p&gt;There&#x27;s a more complete &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;feature-comparison-keybase&quot;&gt;guide on the Keyoxide website&lt;&#x2F;a&gt;, but in a nutshell:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;more privacy-friendly by not forcing you to create an account and handing over data&lt;&#x2F;li&gt;
&lt;li&gt;more secure by not asking you to trust the service with your private keys&lt;&#x2F;li&gt;
&lt;li&gt;open-source servers (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;keybase&#x2F;client&#x2F;issues&#x2F;24105&quot;&gt;a must&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;encrypt&#x2F;verify with every public key accessible on the internet, not just those that have been uploaded to a proprietary server&lt;&#x2F;li&gt;
&lt;li&gt;almost all processing is done in the browser, no data is sent to servers*&lt;&#x2F;li&gt;
&lt;li&gt;no vendor lock-in&lt;&#x2F;li&gt;
&lt;li&gt;selfhostable&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;* Only exception is decentralized identity proof verification: some service providers do not have the correct CORS headers (like Reddit) or require APIs (like Twitter). In these rare cases, simple PHP scripts (also open-source) run the proof verification instead.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Can_I_get_an_account?&quot;&gt;Can I get an account?&lt;&#x2F;h2&gt;
&lt;p&gt;No. &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt; doesn&#x27;t need your data on its servers. There are already several ways of exposing public keys on the internet, including &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;guides&#x2F;web-key-directory&quot;&gt;web key directory&lt;&#x2F;a&gt; (WKD) and dedicated servers like &lt;a href=&quot;https:&#x2F;&#x2F;keys.openpgp.org&quot;&gt;keys.openpgp.org&lt;&#x2F;a&gt;. Let&#x27;s use those instead of making yet another service where you need to upload your keys to.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Can_I_get_a_profile_page_then?&quot;&gt;Can I get a profile page then?&lt;&#x2F;h2&gt;
&lt;p&gt;Yes! Append your PGP fingerprint or WKD id to the URL and there it is!&lt;&#x2F;p&gt;
&lt;p&gt;Want an example? Here&#x27;s  my profile at&lt;br &#x2F;&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;9f0048ac0b23301e1f77e994909f6bd6f80f485d&quot;&gt;https:&#x2F;&#x2F;keyoxide.org&#x2F;9f0048ac0b23301e1f77e994909f6bd6f80f485d&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now you know what accounts on various services are mine, where to follow me if you wish to get updates on the project and if you wish to send me an encrypted message, that&#x27;s also just two clicks away.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;What_about_my_private_keys?&quot;&gt;What about my private keys?&lt;&#x2F;h2&gt;
&lt;p&gt;Don&#x27;t upload your private keys to the internet, period. If a service wants your private keys on their (proprietary) servers, say no.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;You_said_selfhostable?&quot;&gt;You said selfhostable?&lt;&#x2F;h2&gt;
&lt;p&gt;Well, yes! It&#x27;s not a fully supported use case just yet, but the browser does all the processing, the server is mostly just there to deliver the files to the user to perform the operations. &lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;yarmo&#x2F;keyoxide&quot;&gt;Grab the code&lt;&#x2F;a&gt; and put it on your own PHP server!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Any_closing_words?&quot;&gt;Any closing words?&lt;&#x2F;h2&gt;
&lt;p&gt;I built this to provide better tooling around modern-day encryption programs and reduce the friction for less tech-savvy people when interacting with public keys.&lt;&#x2F;p&gt;
&lt;p&gt;For those who wish to use encryption programs beyond OpenPGP, &lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;yarmo&#x2F;keyoxide&#x2F;issues&quot;&gt;let&#x27;s talk about this&lt;&#x2F;a&gt;. Keyoxide doesn&#x27;t have any reference to PGP in its name for a reason: it could serve as a platform for easy interaction with any public key, no matter the underlying encryption program.&lt;&#x2F;p&gt;
&lt;p&gt;And above all, I hope you see the same benefit and potential in &lt;a href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;Keyoxide.org&lt;&#x2F;a&gt; as I do and would like to see it grow as an open and accessible platform to push forward the democratization of online privacy and security.&lt;&#x2F;p&gt;
&lt;p&gt;Privacy is not a luxury.&lt;&#x2F;p&gt;
&lt;p&gt;Many thanks to &lt;a href=&quot;https:&#x2F;&#x2F;metacode.biz&#x2F;@wiktor&quot;&gt;Wiktor&lt;&#x2F;a&gt; for helping with the decentralized identity proofs.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>OPSV: Open PGP Signature Verification</title>
        <published>2020-06-17T11:51:39+00:00</published>
        <updated>2020-06-17T11:51:39+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://yarmo.eu/blog/opsv/"/>
        <id>https://yarmo.eu/blog/opsv/</id>
        
        <content type="html" xml:base="https://yarmo.eu/blog/opsv/">&lt;h1 id=&quot;Introduction_to_OPSV&quot;&gt;Introduction to OPSV&lt;&#x2F;h1&gt;
&lt;p&gt;I&#x27;d like to introduce a new project of mine named &lt;a href=&quot;https:&#x2F;&#x2F;opsv.foss.guru&quot;&gt;Open PGP Signature Verification&lt;&#x2F;a&gt; or OPSV, a FOSS solution for easy PGP signature verification. I have copy-pasted the README from the &lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;yarmo&#x2F;opsv&quot;&gt;Codeberg repo&lt;&#x2F;a&gt; below and added a &amp;quot;Why make this project?&amp;quot; section containing opinions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;About&quot;&gt;About&lt;&#x2F;h2&gt;
&lt;p&gt;This project uses &lt;a href=&quot;https:&#x2F;&#x2F;openpgpjs.org&#x2F;&quot;&gt;openpgp.js&lt;&#x2F;a&gt; loaded in the browser, meaning all processing is done on the device itself and no data is ever sent to the server. It supports loading public keys directly through:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;plaintext input&lt;&#x2F;li&gt;
&lt;li&gt;web key directory (WKD)&lt;&#x2F;li&gt;
&lt;li&gt;HTTP Keyserver Protocol (HKP).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;OPSV will always use the first input method it detects in the order described above.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s also possible to not provide a public key. Read more about this in the &lt;code&gt;Using no public key at all&lt;&#x2F;code&gt; section below.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Usage&quot;&gt;Usage&lt;&#x2F;h2&gt;
&lt;p&gt;Visit https:&#x2F;&#x2F;opsv.foss.guru&#x2F;. On this website, you can enter a signed message (see example below) and any of the three supported public key inputs to verify that the owner of that public key was indeed the person to have signed that message.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Example&quot;&gt;Example&lt;&#x2F;h2&gt;
&lt;p&gt;Let&#x27;s say I, Yarmo, would really like the world to know that I like pineapple. Using my private key, I&#x27;ve signed that statement so you can verify I wrote that message.&lt;&#x2F;p&gt;
&lt;p&gt;The signed statement:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#212733;color:#ccc9c2;&quot;&gt;&lt;code&gt;&lt;span&gt;-----BEGIN PGP SIGNED MESSAGE-----
&lt;&#x2F;span&gt;&lt;span&gt;Hash: SHA256
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;I like pineapple.
&lt;&#x2F;span&gt;&lt;span&gt;-----BEGIN PGP SIGNATURE-----
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;iQJDBAEBCAAtFiEEog&#x2F;Pt4tEmnyVrrtlNzZ&#x2F;SvQIetEFAl70mVUPHHlhcm1vQHlh
&lt;&#x2F;span&gt;&lt;span&gt;cm1vLmV1AAoJEDc2f0r0CHrRQXIP&#x2F;08uza9zOtmZXv5K+uPGVzDKwkgPgZJEezX7
&lt;&#x2F;span&gt;&lt;span&gt;6iQ358f1pjSRvYfQ5aB13k2epUHoqCKArMYu1zPqxhvLvvAvp8uOHABnr9NGL3El
&lt;&#x2F;span&gt;&lt;span&gt;u7UUgaeUNHkr0gxCKEq3p81abrrbbWveP8OBP4RyxmaFx13Xcj7mfDluiBHmjVvv
&lt;&#x2F;span&gt;&lt;span&gt;WU09EdH9VPlJ7WfZ+2G2ZZDHuE5XiaeP7ocugTxXXLkp33zwpDX0+ZuCIXM6fQGe
&lt;&#x2F;span&gt;&lt;span&gt;OccSffglFPdNBnfasuuxDWxTQPsEbWGOPJV+CAPmBDeApX+TBF9bovO3hw4Uozk2
&lt;&#x2F;span&gt;&lt;span&gt;VT7EAy8Hb0SOrUb3UNGxzoKv++5676IxyB4JXX0Tr9O4ZxhO8o9pEEHwirtn&#x2F;J1+
&lt;&#x2F;span&gt;&lt;span&gt;MWven4gVlWM&#x2F;6bMeUqx6ydyNc2nqF5059yfRmwGMlp09x82G4x1bcf6aDZ+5njDG
&lt;&#x2F;span&gt;&lt;span&gt;fS5T2OpXRIkZHJx8BhmZjsxiDR0KV44zwHpt06+96ef3EDWB0BcP6M+a5Rtc33zf
&lt;&#x2F;span&gt;&lt;span&gt;irRmQd2M6RLyXCYtdGIiiAFRuomw802U4F0P4LwVrZdbGA6ObqBv1k8BUFCMbMz8
&lt;&#x2F;span&gt;&lt;span&gt;Ab4hF7kO4z0Vh3JaKzcHey0pOzdNCPpAHZ51sAoAnFDM4PdMBgQxxVweCMu4KYMZ
&lt;&#x2F;span&gt;&lt;span&gt;FN8sNn42oY&#x2F;b7gDmwCelVhgD+rvUn&#x2F;a8+B7CDmCp+wIquyrjrTt00voATcb+ZPMJ
&lt;&#x2F;span&gt;&lt;span&gt;pTXJ&#x2F;NcM
&lt;&#x2F;span&gt;&lt;span&gt;=rqTX
&lt;&#x2F;span&gt;&lt;span&gt;-----END PGP SIGNATURE-----
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Use this as &amp;quot;Signature&amp;quot; on &lt;a href=&quot;https:&#x2F;&#x2F;opsv.foss.guru&#x2F;&quot;&gt;OPSV&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;Using_plaintext_public_key&quot;&gt;Using plaintext public key&lt;&#x2F;h3&gt;
&lt;p&gt;Now, let&#x27;s check the signature. Go to &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&#x2F;pgp&quot;&gt;my personal website&lt;&#x2F;a&gt; and copy-paste the &amp;quot;plaintext&amp;quot; key in the &amp;quot;Public Key (1: plaintext)&amp;quot; field.&lt;&#x2F;p&gt;
&lt;p&gt;You will see a green message confirming that my key was used to sign this message. I really do like pineapple.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;Using_web_key_directory_(WKD)&quot;&gt;Using web key directory (WKD)&lt;&#x2F;h3&gt;
&lt;p&gt;Remove the contents from the &amp;quot;Public Key (1: plaintext)&amp;quot; field. Now, in the &amp;quot;Public Key (2: web key directory)&amp;quot;, write &lt;code&gt;yarmo@yarmo.eu&lt;&#x2F;code&gt; and verify the signature again. It is still verified. Try using &lt;code&gt;jane@doe.org&lt;&#x2F;code&gt; or any other input, it won&#x27;t verify.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;Using_HTTP_Keyserver_Protocol_(HKP)&quot;&gt;Using HTTP Keyserver Protocol (HKP)&lt;&#x2F;h3&gt;
&lt;p&gt;Remove the contents from the &amp;quot;Public Key (2: web key directory)&amp;quot; field. I uploaded my keys to the https:&#x2F;&#x2F;keys.openpgp.org&#x2F; HKP server, which is the default server used by OPSV. All you need to do is once again go to &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&#x2F;pgp&quot;&gt;my personal website&lt;&#x2F;a&gt; and copy-paste the &amp;quot;Fingerprint&amp;quot; in the &amp;quot;Public Key (3: HKP)&amp;quot; field (the second field!). Still verified!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;Using_no_public_key_at_all&quot;&gt;Using no public key at all&lt;&#x2F;h3&gt;
&lt;p&gt;Wait, what? Then what am I verifying the signature against?&lt;&#x2F;p&gt;
&lt;p&gt;PGP signatures can contain the &lt;code&gt;userId&lt;&#x2F;code&gt; of the signer. If OPSV finds a &lt;code&gt;userId&lt;&#x2F;code&gt;, it will use it to perform a HKP lookup.&lt;&#x2F;p&gt;
&lt;p&gt;Remove the contents from the &amp;quot;Public Key (3: HKP)&amp;quot; field. It again verifies BUT against the information contained within the signature itself. You should carefully check the information OPSV returns. In this case, the authenticity is confirmed because the &lt;code&gt;userId&lt;&#x2F;code&gt; (yarmo@yarmo.eu) matches the one I use.&lt;&#x2F;p&gt;
&lt;p&gt;The signature below does not contain a &lt;code&gt;userId&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#212733;color:#ccc9c2;&quot;&gt;&lt;code&gt;&lt;span&gt;-----BEGIN PGP SIGNED MESSAGE-----
&lt;&#x2F;span&gt;&lt;span&gt;Hash: SHA256
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;I like pineapple.
&lt;&#x2F;span&gt;&lt;span&gt;-----BEGIN PGP SIGNATURE-----
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;iQIzBAEBCAAdFiEEog&#x2F;Pt4tEmnyVrrtlNzZ&#x2F;SvQIetEFAl70mT4ACgkQNzZ&#x2F;SvQI
&lt;&#x2F;span&gt;&lt;span&gt;etHUNBAAlswF4Q5IkPTsMELZPNHBps8CUJUeDWu3HlSz7c2U+4h2jJztHD0mDtxH
&lt;&#x2F;span&gt;&lt;span&gt;PqKzUnqQqNF1Bot&#x2F;&#x2F;5xoOcn+m6UaSCzDk1oQFwD6LlQA+ScnIXddoV3xLqzTRAMe
&lt;&#x2F;span&gt;&lt;span&gt;dyuqOoDzoVeD+fWlwisnGElYX5jHRX6tgyKNh0auR3&#x2F;crQUIJazAyeDwZFdJiwaL
&lt;&#x2F;span&gt;&lt;span&gt;ntd+d8T0BcVlVVPYN7RIp1hpT+PLIcwIsr64Myfy8SOa4cjVcQgnrhR&#x2F;Lfz9680T
&lt;&#x2F;span&gt;&lt;span&gt;LCpnSohHRiA82nMGRiapEv+s+zy1NUZnVYbU2Li+Q0nYdSoDFu0xEBYmLOxwS50H
&lt;&#x2F;span&gt;&lt;span&gt;j6kK0ZyRicNeq2T25aIlieliTmSFLHHpzi&#x2F;Zw8Yt1+FtZvWf4pstA19ahk7AQK5W
&lt;&#x2F;span&gt;&lt;span&gt;zYF2bMO2xn5D4&#x2F;pRz1P4e2NTWYeIK+ZHttc7T9ZSS9Ffo03fjcJXhson3WcQZKB5
&lt;&#x2F;span&gt;&lt;span&gt;VIGVVFnlWujNYYotmxys84OtE6ePfVRwHasIOLfknVq64RVo68Y1Pgw&#x2F;KPXSb1k6
&lt;&#x2F;span&gt;&lt;span&gt;3r+YD0mt5i&#x2F;NWpwm79G&#x2F;Aq54WI5JT905div88d0Bbpa3dScTZ2MiBJbP96pZBcKl
&lt;&#x2F;span&gt;&lt;span&gt;dpm3RnjsbCFgZqEpclrEh2SD1e8eCjrNcouWK3jIfOkaWB2xk1KvNmdyQQTs3dkP
&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;CpKcCJiNVvY9ogWxg9aUuQZUn4WvCvaEkmP4dfkk9s8yAKPQf8=
&lt;&#x2F;span&gt;&lt;span&gt;=QqCq
&lt;&#x2F;span&gt;&lt;span&gt;-----END PGP SIGNATURE-----
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Once again, the signature verifies. And again, it only verifies against the information contained within itself so &lt;strong&gt;that doesn&#x27;t prove anything about its authenticity&lt;&#x2F;strong&gt;. Anyone can write this and the signature will return verified.&lt;&#x2F;p&gt;
&lt;p&gt;Except now, there is no &lt;code&gt;userId&lt;&#x2F;code&gt; for easy manual verification. So, you need to either take the &lt;code&gt;keyId&lt;&#x2F;code&gt; or the &lt;code&gt;fingerprint&lt;&#x2F;code&gt; and find some other way of verifying it, for example by contacting the person who supposedly wrote the message.&lt;&#x2F;p&gt;
&lt;p&gt;In my case, you can simply visit &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&#x2F;pgp&quot;&gt;my personal website&lt;&#x2F;a&gt; and compare the &lt;code&gt;fingerprint&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;What_can_a_bad_actor_do?&quot;&gt;What can a bad actor do?&lt;&#x2F;h3&gt;
&lt;p&gt;One could not sign a statement with my private key: I, and only I, have access to it.&lt;&#x2F;p&gt;
&lt;p&gt;One could however simply take any of my signed messages and change the content. Like so:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#212733;color:#ccc9c2;&quot;&gt;&lt;code&gt;&lt;span&gt;-----BEGIN PGP SIGNED MESSAGE-----
&lt;&#x2F;span&gt;&lt;span&gt;Hash: SHA256
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;I like privacy invasion.
&lt;&#x2F;span&gt;&lt;span&gt;-----BEGIN PGP SIGNATURE-----
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;iQJDBAEBCAAtFiEEog&#x2F;Pt4tEmnyVrrtlNzZ&#x2F;SvQIetEFAl70la8PHHlhcm1vQHlh
&lt;&#x2F;span&gt;&lt;span&gt;cm1vLmV1AAoJEDc2f0r0CHrRDcYP&#x2F;R4Yo+xiBLHtrOEMAQQkwbxWyQgCbjS4h9iF
&lt;&#x2F;span&gt;&lt;span&gt;As86o9a+t5dKSsL4gSoB3sdNAL0a1ZOhaAU8kWaR6xN1RvCQjFr878hEf631yai6
&lt;&#x2F;span&gt;&lt;span&gt;DfF2eRZPEsjXkAzlOKlPrAvtrNwUUMSDk20rGa4A9HHdxpfrmDRIgVaz3uNr1qqc
&lt;&#x2F;span&gt;&lt;span&gt;N&#x2F;Ag3OK&#x2F;2l1pZFTqjPekqDnXwblLiuTTLFlMlS80LFKoa7zZLkE5SD5O6WQFpOK7
&lt;&#x2F;span&gt;&lt;span&gt;DwYJk1+UjWDgVugz8rSLWag0mag9Z815furPIkU9yRmE1tIjsgpCR+uJA&#x2F;e0I4bn
&lt;&#x2F;span&gt;&lt;span&gt;4Ei0M29df1QucDNv6q2WoW&#x2F;7rCMz1IY796TY&#x2F;BbdqbFk6vOUUHu596mQB+fJDNTX
&lt;&#x2F;span&gt;&lt;span&gt;jGC0SpJPhzhgoZICzK8yWJMJGoLXScYj95rCAqjYdnW&#x2F;LDdAgODCyjSOxnzdI1zi
&lt;&#x2F;span&gt;&lt;span&gt;prQf4OmayHzDjI8Bo4bl22toPdSIDt3r5MmSGXcmBrNU16ea7FC9MnR8dkKfHD55
&lt;&#x2F;span&gt;&lt;span&gt;tC3UL2Ps&#x2F;iU76kqzGAei1PKvaVqKogUGi&#x2F;kqWzfi2eg+useHRyZpJrJv3R2mE0Y2
&lt;&#x2F;span&gt;&lt;span&gt;eSLMMJ5cTuM60c0GSIPOxzBBsMRwa0HmEQ3HKgpnpkVYxoA00&#x2F;hq91kuNavqUqM+
&lt;&#x2F;span&gt;&lt;span&gt;OyOgbb21woPAG+S4OCHkOINEAooeCfhpSFtmpa87sUcfvDHUuX1ivL4rYoQO3cT2
&lt;&#x2F;span&gt;&lt;span&gt;gNfjdSiB
&lt;&#x2F;span&gt;&lt;span&gt;=tqZV
&lt;&#x2F;span&gt;&lt;span&gt;-----END PGP SIGNATURE-----
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Given the wording of the statement, you naturally doubt the origin of it being me. You run it through OPSV and indeed, this is not what I wrote!&lt;&#x2F;p&gt;
&lt;p&gt;You know me, &amp;quot;I despise privacy invasion.&amp;quot; (hint hint).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Why_make_this_project?_(with_opinions)&quot;&gt;Why make this project? (with opinions)&lt;&#x2F;h2&gt;
&lt;p&gt;This project directly targets a specific use-case of &lt;a href=&quot;https:&#x2F;&#x2F;keybase.io&quot;&gt;Keybase&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It is possible to upload your public key (don&#x27;t upload your private key…) to the Keybase servers. When you sign a message using your private key, anyone can verify that you wrote that message by simply using their &lt;a href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;verify&quot;&gt;verify page&lt;&#x2F;a&gt;. It&#x27;s really simple to use, but you&#x27;ll notice something is missing: a field asking you which key to use for the verification. What Keybase does is check the message against all of the keys it knows about and then let you know which of its users wrote and signed that message.&lt;&#x2F;p&gt;
&lt;p&gt;It is my humble opinion that this is an anti-pattern. By not being able to verify against a single key, you open the door to impersonation: I can make an account named &lt;code&gt;j0hn&lt;&#x2F;code&gt; and pretend to be &lt;code&gt;john&lt;&#x2F;code&gt;. If I write a false statement and sign it with &lt;code&gt;j0hn&lt;&#x2F;code&gt;&#x27;s key, Keybase will gladly tell you that the message is legit and signed: it is, but by the wrong person. It is up to the user to then investigate &lt;code&gt;j0hn&lt;&#x2F;code&gt;&#x27;s Keybase account and figure out if it belongs to &lt;code&gt;john&lt;&#x2F;code&gt; or some bad actor.&lt;&#x2F;p&gt;
&lt;p&gt;Considering recent events, namely Keybase&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;blog&#x2F;keybase-joins-zoom&quot;&gt;acquihire by Zoom&lt;&#x2F;a&gt; and Zoom&#x27;s willingness to bend to &lt;a href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;technology&#x2F;2020&#x2F;jun&#x2F;03&#x2F;zoom-privacy-law-enforcement-technology-yuan&quot;&gt;US law enforcement&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;2020&#x2F;06&#x2F;11&#x2F;technology&#x2F;zoom-china-tiananmen-square.html&quot;&gt;Chinese&lt;&#x2F;a&gt; influence, combined with their &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;keybase&#x2F;client&#x2F;issues&#x2F;24105&quot;&gt;unwillingness to release the server source code&lt;&#x2F;a&gt;, I strongly urge all to &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&#x2F;notes&#x2F;deletekeybase&quot;&gt;#deletekeybase&lt;&#x2F;a&gt;. They are not worthy of your keys and your data. It is a mystery what happens to your keys once you give them to Keybase, and with their employers working for a company eager to please privacy-invading governments, why would you? Seriously, why would you ever give your valuable private keys to Keybase?&lt;&#x2F;p&gt;
&lt;p&gt;I was having this discussion on the fediverse recently and a privacy-minded individual still was forced to use Keybase for the simple reason it was the easiest and beginner-friendly way of verifying PGP signatures that didn&#x27;t involve installing complicated software and handling PGP keys.&lt;&#x2F;p&gt;
&lt;p&gt;Well now, there is &lt;a href=&quot;https:&#x2F;&#x2F;opsv.foss.guru&quot;&gt;OPSV&lt;&#x2F;a&gt;. It has the same intuitive copy-paste workflow as Keybase does, with the only additional step of having to copy-paste a plaintext key, email address or fingerprint (which, in my book, is a feature!). Processing is done client-side, so no data is sent to any server.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;Why_include_privacy-friendly_plausible.io_stats?&quot;&gt;Why include privacy-friendly plausible.io stats?&lt;&#x2F;h3&gt;
&lt;p&gt;Well, without sounding cocky, I humbly believe this is the first project I made that could actually make a difference to people&#x27;s workflow on the internet. As such, if usage suddenly spikes, I need to know if the server can handle it.&lt;&#x2F;p&gt;
&lt;p&gt;Because asking users to accept website statistics is much in my opinion, I decided a nice compromise was to make the &lt;a href=&quot;https:&#x2F;&#x2F;plausible.io&#x2F;opsv.foss.guru&quot;&gt;statistics public&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If open statistics or any statistics at all is not to your liking, please do let me know by &lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;yarmo&#x2F;opsv&#x2F;issues&quot;&gt;opening an issue&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Final_words&quot;&gt;Final words&lt;&#x2F;h2&gt;
&lt;p&gt;I hope you like this project, I know I do. OPSV allows me to use signed messages more and provide a simple and secure way to verify their authenticity without relying on big corporations. This is our web, so it&#x27;s also our duty to keep it secure.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;Update_1&quot;&gt;Update 1&lt;&#x2F;h2&gt;
&lt;p&gt;Added the &lt;code&gt;Using no public key at all&lt;&#x2F;code&gt; section.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mailvelope: PGP for all</title>
        <published>2020-05-18T16:29:21+00:00</published>
        <updated>2020-05-18T16:29:21+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://yarmo.eu/blog/mailvelope/"/>
        <id>https://yarmo.eu/blog/mailvelope/</id>
        
        <content type="html" xml:base="https://yarmo.eu/blog/mailvelope/">&lt;p&gt;&lt;code&gt;#100DaysToOffload &amp;gt;&amp;gt; 2020-05-18 &amp;gt;&amp;gt; 020&#x2F;100&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pretty_Good_Privacy&quot;&gt;PGP&lt;&#x2F;a&gt; is a &amp;quot;pretty good&amp;quot; way of encrypting messages and files but gets often criticised for being too cumbersome to work with, which is sadly true. To counter this, certain products and services use PGP internally and provide an easy-to-use interface. Take Protonmail who uses &lt;a href=&quot;https:&#x2F;&#x2F;protonmail.com&#x2F;support&#x2F;knowledge-base&#x2F;how-to-use-pgp&#x2F;&quot;&gt;PGP to automatically encrypt emails between protonmail addresses&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Handy, but we are forgetting something. If the PGP protocol is the lock, then the PGP keys are, well, the keys. Protonmail has both the lock and the key on their servers. That&#x27;s not secure…&lt;&#x2F;p&gt;
&lt;p&gt;Luckily, there are more tools, like &lt;a href=&quot;https:&#x2F;&#x2F;www.mailvelope.com&#x2F;en&#x2F;&quot;&gt;Mailvelope&lt;&#x2F;a&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mailvelope&#x2F;mailvelope&quot;&gt;source code&lt;&#x2F;a&gt;). It&#x27;s nothing more than a browser add-on, meaning it will automatically work with any webmail service out there. Encrypting your emails becomes very simple (I also have a &lt;a href=&quot;https:&#x2F;&#x2F;yarmo.eu&#x2F;contact#mailvelope&quot;&gt;more detailed guide&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Load the recipient&#x27;s public key in Mailvelope&lt;&#x2F;li&gt;
&lt;li&gt;Open your webmail service&lt;&#x2F;li&gt;
&lt;li&gt;Click the pink Mailvelope logo&lt;&#x2F;li&gt;
&lt;li&gt;Choose the key of the recipient&lt;&#x2F;li&gt;
&lt;li&gt;Write the email&lt;&#x2F;li&gt;
&lt;li&gt;Click encrypt and send the email&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;That is actually quite easy and feasible for the less tech-savvy people.&lt;&#x2F;p&gt;
&lt;p&gt;But keep in mind (the usual email&#x2F;PGP disclaimer): email is inherently insecure. Email metadata (including title!) is not encrypted, only the body is. Information about your secret communication can be infered from the metadata. Though PGP-encrypted emails are nice to have, truly private communication is achieved using &lt;a href=&quot;https:&#x2F;&#x2F;www.privacytools.io&#x2F;software&#x2F;real-time-communication&#x2F;&quot;&gt;encrypted instant messengers&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
