<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Plurality on Medium]]></title>
        <description><![CDATA[Stories by Plurality on Medium]]></description>
        <link>https://medium.com/@plurality.web3?source=rss-a42541e1485e------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*x2j0fV-ptReGRDmku9pO1Q.png</url>
            <title>Stories by Plurality on Medium</title>
            <link>https://medium.com/@plurality.web3?source=rss-a42541e1485e------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 20 Jun 2026 21:02:08 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@plurality.web3/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Make engaging dApps!]]></title>
            <link>https://medium.com/@plurality.web3/make-engaging-dapps-244db355ed3f?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/244db355ed3f</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[web3]]></category>
            <category><![CDATA[personalization]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Thu, 22 Feb 2024 22:30:32 GMT</pubDate>
            <atom:updated>2024-02-22T22:30:32.494Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>93% of users churn on web3. Is churn rate also a problem for your dApp? If yes, read on!</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/0*edSIr3SQ3aDwxKVy.jpg" /><figcaption><a href="https://www.newfangled.com/the-internet-is-a-work-in-progress/">Image </a>taken from a 2009 article that has aged well</figcaption></figure><p>Since the dawn of the internet, humans have strived to enhance the web experience and make it an engaging, enjoyable experience. First, we had static websites where every person in the world saw the same thing on the internet.</p><p>Then, to improve it, we moved on to creating profiles that <strong><em>personalized</em></strong><em> </em>a website for each user by adding their details and preferences. Alongside profiles came cookies that tracked the activities of users across the internet. Based on the user activity, each person’s personas became further enriched and the web experience became further personalized with functionalities like content recommendations, personalized social feeds, tailored messaging, relevant advertisements, etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/0*W9RBdaiq1TStiTyJ.jpg" /><figcaption>On the internet, everyone gets a personalized experience catering to their interests and preferences</figcaption></figure><p>Today, a modern user not only expects a personalized experience, but <a href="https://www.cheetahdigital.com/wp-content/uploads/Cheetah_Experiences___The_Zero_Party_Data_Playbook.pdf">71 percent</a> get frustrated when this doesn’t happen. The personalization features can make or break any website.</p><blockquote>The better your website’s personalization, the more the user retention rates.</blockquote><h3>The Advent of Web3</h3><p>For the past decade, we have been reimagining the internet, making it decentralized and free from control, censorship, or manipulation. The web3 community has been developing decentralized apps (dApps) and has been trying to get adoption.</p><p>However, they haven’t been quite successful there. The experience on web3 platforms isn’t exactly fun and the user churn rates across all dApps are a dismal <a href="https://www.ccn.com/news/ethereum-user-retention-dismal-compared-mobile-apps/">93%</a>.</p><p>When a person lands on a web3 dApp for the first time, the decades-long context of the person that he or she created in the web2 world is all gone and they have to start from scratch on the web3 platform. On average, a new website only has <a href="https://mbbryantimages.com/2022/06/12/10-second-rule-why-users-leave-a-website/#:~:text=What%20exactly%20is%20the%2010,them%20to%20hang%20out%20longer.">10 seconds</a> to capture a new user’s attention before they churn. Figuring out how to connect a wallet alone takes more time than that and even after the connection, there is no user context attached to the wallet so every person on the dApp has <strong><em>exactly </em></strong>the same experience.</p><blockquote>When it comes to experience, web3 is synonymous to web1 as there is no personalization.</blockquote><p>This leads to the <a href="https://medium.com/twosapp/the-cold-start-problem-how-to-start-and-scale-network-effects-by-andrew-chen-813f0668c70f">cold start problem</a> for dApps where not only is it difficult for the users to acquire new customers but also to retain existing ones. So, how big a problem is it really that there is no personalized user experience on dApps? Let’s take a look at the stats.</p><ol><li><a href="https://www.cheetahdigital.com/wp-content/uploads/Cheetah_Experiences___The_Zero_Party_Data_Playbook.pdf">71%</a> of consumers express some level of frustration when their experience is impersonal</li><li><a href="https://www.forbes.com/sites/blakemorgan/2020/02/18/50-stats-showing-the-power-of-personalization/">80%</a> of consumers indicated they would be more likely to purchase from a brand that provides a personalized experience.</li><li><a href="https://www2.deloitte.com/az/en/pages/consumer-business/articles/cip-automotive-trends-millennials-consumer-study.html">80%</a> of consumers were more likely to do business with a company that offered personalized experiences.</li><li><a href="https://www.infosys.com/iki/perspectives/rethinking-retail.html">31%</a> of consumers wished their shopping experience was more personalized than it currently was.</li><li><a href="https://www.accenture.com/content/dam/accenture/final/a-com-migration/pdf/pdf-83/accenture-making-personal.pdf">91%</a> of consumers are more likely to shop with brands that provide relevant offers and recommendations.</li><li><a href="https://hyperise.com/files_personalization-report.pdf">44%</a> of consumers who were satisfied with personalized service become repeat customers</li></ol><p>From the stats, it’s quite clear that people expect personalization in their online experiences. But, personalization cannot happen without having some contextual data of users, which brings the question of privacy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/0*i6SwLzvZOma6cV_S.jpeg" /><figcaption><a href="https://acquire.io/blog/personalization-vs-data-privacy">The balancing of personalization and privacy</a></figcaption></figure><h3>So, can personalization and privacy co-exist?</h3><p>The big question is, would users want to share their data for personalization? Let’s take a look at the stats once again</p><ol><li><a href="https://www.cheetahdigital.com/wp-content/uploads/Cheetah_Experiences___The_Zero_Party_Data_Playbook.pdf">52%</a> of consumers would share personal data in exchange for product recommendations</li><li><a href="https://www.cheetahdigital.com/wp-content/uploads/Cheetah_Experiences___The_Zero_Party_Data_Playbook.pdf">64%</a> of consumers are happy with retailers to save personal preferences if more personalization is offered</li><li><a href="https://www2.deloitte.com/az/en/pages/consumer-business/articles/cip-automotive-trends-millennials-consumer-study.html">90%</a> were comfortable with companies collecting data if it led to a personalized experience.</li></ol><p>Hmmm, that’s quite a conundrum, isn’t it? We live in contradictory times. The modern consumer demands increased privacy, tightened data controls, and the right to be forgotten. That’s easily deliverable until you contrast those demands with their expectations for tailor-made content, bespoke product recommendations, and uber-personalization. Add to it the fact that people are also okay with sharing <em>some </em>of their data if they believe they get a better experience for it.</p><p>So, what’s the best possible way to do so in web3 keeping in mind that a web3 wallet has no contextual data attached to it? And is it possible to do it while respecting people’s privacy?</p><p>Well, there are a few approaches to balance privacy and personalization.</p><h3>NFTs as a zero-party data strategy</h3><p>For the past 3 years, NFTs have been experimented with in many different ways. One of them is for loyalty programs by brands using zero-party data strategies.</p><blockquote><em>Zero-party data strategy is when users consensually share their data with a party in exchange for some value through forms, questionnaires, polls, etc.</em></blockquote><p>So, brands have been asking users to give their data with their consent directly to the brands (zero-party data strategy) and get NFTs in return which will allow them to get discounts, promos, and other benefits.</p><p>This strategy makes sense but is extremely limited. Going to each website and filling out form after form for freebies is not only frustrating but cannot scale. Moreover, how much data can you fill out? Humans produce 146 GB of digital footprint each day which just cannot be transferred to a single form. Adding wound to the salt, NFTs are publicly reflected in your wallet, which isn’t exactly adhering to the concept of privacy.</p><p>So, are there any better options or web3 is doomed to be impersonalized and boring forever? What else is out there?</p><h3>The Better Zero-Party Data Strategy with Self-Sovereign Identity</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/512/0*VU9xFrXwQ1huh6mK.png" /><figcaption>Travelling across cyberspace with our data</figcaption></figure><p>What if instead of filling out forms again and again and getting very little personalization and benefits in return, we could have all our data in a data backpack, that we take with us on any website as we travel across cyberspace and plug it in on that website to be used for personalization. We decide when, how, and where that data is used.</p><blockquote><em>“Personalization and privacy can only co-exist in the future with a zero-party data strategy.” — Scott McNealy, founder at Sun Microsystems</em></blockquote><p>With technological standards like Self-Sovereign Identity, not only is this possible, but is also being done in projects.</p><p>This is what <a href="https://plurality.network/">plurality network</a> is doing by allowing dApps to get contextualized user information that helps them to personalize user experience on their website, without needing to store the data.</p><p>We could never bring the next billion users to web3 without giving them <em>at least the same level</em> of user experience as on the internet today.</p><p>Know of any other projects working in this domain? Hit me up!</p><p>Hey there, thanks for reading this far. If you liked this article, don’t forget to follow and leave a clap.</p><p>Follow me here, on <a href="https://www.linkedin.com/in/hira-siddiqui-96b60a74/">LinkedIn</a>, on <a href="https://twitter.com/identityonchain">X</a>, and on <a href="https://warpcast.com/hirasiddiqui">Farcaster</a> to get the latest blockchain technical content in simple, bite-sized reads.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=244db355ed3f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Plurality goes to ETH Zurich]]></title>
            <link>https://medium.com/@plurality.web3/plurality-goes-to-eth-zurich-a2ad3e7e2588?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/a2ad3e7e2588</guid>
            <category><![CDATA[eth-zurich]]></category>
            <category><![CDATA[verifiable-credentials]]></category>
            <category><![CDATA[decentralized-identity]]></category>
            <category><![CDATA[hackathons]]></category>
            <category><![CDATA[identity]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Mon, 17 Apr 2023 15:28:04 GMT</pubDate>
            <atom:updated>2023-04-17T15:28:04.119Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/945/1*vvvVfTVN9e66VUZ71HD53w.png" /></figure><p>Last weekend was a thrilling and energy packed atmosphere at ETH Zurich, where the plurality team hacked away the first prototype of Plurality.</p><p>The plurality team presented the concept of a privacy-preserving identity layer for DEFI and the blockchain world that any dApp developer can easily integrate into its workflows.</p><p>The modular application design and the use of Semaphore to create the Zero-Knowledge Identity Layer intrigued many fellow web3-enthusiasts and led to many interesting discussions.</p><p>From proof-of-personhood to sybil resistance to full-fledged KYC, plurality has the modularity to fulfil all such use cases.</p><p>The showcased demo showed the example of a mortgage lending dApp that requires its users to identity themselves but also doesn’t want to put any personal information on-chain.</p><p>The demo can be seen here:</p><p><a href="https://www.youtube.com/watch?v=7fA5Kyl2NcA">https://www.youtube.com/watch?v=7fA5Kyl2NcA</a></p><p>To test out the demo code, you can clone from this git repository:</p><p><a href="https://github.com/Web3-Plurality/zk-onchain-identity-verification">GitHub - Web3-Plurality/zk-onchain-identity-verification</a></p><p>Hey there, thanks for reading this far.</p><p><a href="https://plurality.my.canva.site/">Plurality</a> is a product that offers Decentralized Identity for the Decentralized Society.</p><p>If you like this story, don’t forget to follow our <a href="https://twitter.com/PluralityWeb3">twitter</a> and leave a clap. :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a2ad3e7e2588" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Plurality: Decentralized Identity for the Decentralized World]]></title>
            <link>https://medium.com/blockchain-biz/plurality-decentralized-identity-for-the-decentralized-world-242c931393de?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/242c931393de</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[self-sovereign-identity]]></category>
            <category><![CDATA[decentralized-identity]]></category>
            <category><![CDATA[plurality]]></category>
            <category><![CDATA[kyc-verification]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Tue, 28 Mar 2023 22:13:48 GMT</pubDate>
            <atom:updated>2023-04-04T15:27:44.242Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*j3s2oGB1mC4Feg-lSbJf9Q.png" /><figcaption>Image credits <a href="https://pngtree.com/freebackground/human-hud-ui-interface-face-id_1259816.html?share=2"><strong>hoanglong903</strong></a></figcaption></figure><p>Ever since the modern world has adopted a monetary value exchange system, identification of involved parties has been the cornerstone of every transaction. Today, every monetary transaction is identified and tracked. Various regulatory bodies like <a href="https://www.fatf-gafi.org/en/home.html">FATF</a> provide guidelines to track the money trails such as “Travel Route”. Unidentified transactions are not considered legal, and every new value exchange technology, like Blockchain, is judged and examined under the same lens:</p><blockquote>Do we know who is sending payment to whom?</blockquote><p>In 2009, a peer-to-peer transactional system called Bitcoin was introduced. The concept was simple: One world, one global ledger that has transparency in transactions without the need of any centralized party. Fast forward to 2022, we are living in a world where all the internet is slowly shifting to programmable blockchains which are managed and enabled decentrally by the community. We call it web3.</p><p>While the key concept of this decentralization and web3 is revolutionary, it lacks one key piece of puzzle i.e., Identity. Blockchains provide pseudonymity — which means that it’s impossible to know the actual people behind any transaction. This has created two major challenges for the blockchain community:</p><ol><li><strong>Legal Challenges:</strong> The government regulations ask for identification of the sender and receiver in value-exchange transactions — which is not possible natively in blockchain.</li><li><strong>Adoption Challenges:</strong> It posed a hurdle in adoption of web3 in traditional use cases like lending, mortgage, social media, insurance etc. For example, how can you create a truly decentralized mortgage platform or under-collaterized lending platform without knowing who you are lending to or what is their risk profile?</li></ol><p>The legal challenges have partially been catered by the creation of centralized cryptocurrency exchanges or marketplaces. These exchanges or marketplaces are run by centralized organizations that identify users and do the KYC (Know Your Customer), let them buy cryptocurrency and crypto assets for fiat and then hold their assets.</p><p>Examples are Binance, Coinbase, Kraken etc. However, the paradox is that for buying the assets of the <em>decentralized world, </em>these platforms use the same <em>centralized</em> means for identification that blockchain originally set out to disrupt. We basically ended up at the point where we started from.</p><blockquote>For decentralized world, same centralized means are used that blockchain originally set out to disrupt</blockquote><p>Moreover, the crypto regulatory landscape is constantly changing and more and more applications like DeFi, DAOs, NFT Marketplaces — which previously did not have to comply to regulations are now coming into the regulatory umbrella after regulations like <a href="https://www.bankingcircle.com/mica-regulation-what-does-it-mean-for-crypto-0113521">MiCA</a>.</p><p>Now coming to the adoption challenges, currently, no native identification solution exists. Therefore, the blockchain is restricted as only a financial tool even though it has the potential to provide an improved, decentralized version of many solutions we see today e.g., social media, lending, insurances etc. Until there is a native identification solution, the blockchains will be stuck to only being a “bank account”.</p><p>This is what plurality has set out to solve. Plurality wants to solve the identification problem in public blockchains and give innovative dApps a chance to survive in the complex crypto-regulatory landscape. Moreover, by 2030, the decentralized identity market is expected to grow to <a href="https://www.grandviewresearch.com/industry-analysis/decentralized-identity-market-report">$100 billion from the current $1 billion</a>. So, the need for decentralized identification is going to exponentially grow in the coming decade.</p><p>To provide the ground for the next generation of innovative applications in the blockchain space, we need an identification mechanism that is:</p><p>1. <strong>Decentralized</strong>: no single party holds or controls it</p><p>2. <strong>Off-chain</strong>: Personal Identifiable Information is not stored permanently on the blockchain (necessary for GDPR compliance)</p><p>3. <strong>Privacy-preserving</strong>: Protects the privacy of the individual by disclosing only the minimal required identity to the required party.</p><p>4. <strong>Plural</strong>: Different subsets of identity disclosed to different parties i.e., plural identity relationship</p><p>5. <strong>Peer to peer:</strong> Identification takes place only between the concerned parties in a peer to peer fashion</p><p>The decentralized society is not complete without an identification mechanism that’s decentralized, protects and respects human beings and their inviolable right to privacy. This final piece of puzzle is enabled by Plurality.</p><h3>How Plurality does this?</h3><p>Plurality proposes to use the concepts and techniques from Self Sovereign Identity ecosystem to bridge the SSI and the blockchain world. (Read through our <a href="https://medium.com/@plurality.web3/improving-kyc-processes-using-self-sovereign-identity-ab0f984e93d9">three-part series</a> to understand SSI better).</p><p>Plurality wallet has created a novel approach to pair your credentials to your blockchain address in a provable way — without compromising on privacy.</p><p>To understand how plurality does this, let’s assume an example where Alice wants to prove to Bob that she lives in London. She can do this easily by revealing to Bob her residence card. Or, if she wants to be more privacy preserving, she can use the technique of selective disclosure where only selected parts of her identity card will be revealed.</p><p>However, if she also wants to prove that she is the owner of a certain blockchain address, all she needs to prove is that she also knows the secret of the wallet i.e., the private key.</p><p>Alice creates a Verifiable Credential proof of her residence city and then signs it with the private key of the blockchain wallet.</p><p>Once Bob receives the proof from Alice, he will unpack it with the public key of Alice and then verify the proof. If the unpacking of proof is successful, this means that Alice indeed was the creator of the proof since she was the only one who knows the private key of her blockchain wallet. This way, Bob would know whether Alice lives in London and what her blockchain address is.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/945/1*_Fuz3FtPmtAoSCQfDqNi6A.png" /><figcaption>Alice proves her identity to Bob</figcaption></figure><h3>Decentralized Mediation Protocol (DMP)</h3><p>Peer to peer communication between proving and verifying parties cannot happen without decentralized mediators in between. Mediators are servers that forward the messages between provers and verifiers without knowing about the information in the message.</p><p>Plurality aims to create a Decentralized Mediation Protocol (DMP) which will enable a network of mediators to facilitate communication between the parties without compromising on privacy. This pool of mediators will be completely decentralized which means that anyone can setup a server and start offering mediation services. These mediators will be compensated as per their service accordingly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/945/1*I66z2EaIkqkfaLi2jpkSrg.png" /><figcaption>Alice and Bob communicate peer to peer in a privacy preserving fashion</figcaption></figure><h3>Storage on Blockchain</h3><p>After every successful verification, a zero-knowledge proof of verification will be stored on the blockchain which will reveal no personally identifiable information of the user, just that the user meets the criteria for the proof.</p><h3>How dApps can use Plurality for identifying their users?</h3><p>The DApps need to take the following steps:</p><p>1. Dapps first figure out what kind of information do they need from users? E.g., address from identity card to prove residence in Europe, passport number from passport etc.</p><p>2. Follow the simple steps to setup your dapp’s verifier service and configure it with proof requirements</p><p>3. The DApp is now able to identify its users by cryptographically verifying the presented credentials.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/945/1*CQtK4I6_EP9Hw251MPrdqw.png" /><figcaption>DApp sets up identification for its users in few easy steps</figcaption></figure><h3>Conclusion</h3><p>Decentralization is a major step in the vision of an independent, plural society. Blockchains are bringing us one step closer to that vision. However, a key piece of this puzzle i.e. identification of people still remains highly centralized and restrictive. This not only goes against the principles of web3, but also poses serious privacy concerns for the parties involved. Moreover, it limits the innovative use cases that can be created in this ecosystem.</p><p>New and upcoming regulations in the crypto-space are asking more and more dapps to identify their users. Plurality wants to give innovative dapps a chance to survive in the crypto regulatory landscape without compromising on the web3 ethos of decentralization and privacy-by-design.</p><p>Plurality proposes a better way to handle identification using Self Sovereign Identity (SSI), which lets users be in control of their data. The users should be able to decide when, how much and to whom their personal information needs to be revealed. Plurality attempts to create an identification system that protects the inviolable dignity of humankind by ensuring privacy and decentralization. By design, it supports all programmable blockchains and can support multiple types of identification credentials. Plurality brings the complexity of human relationships on the blockchain, giving rise to a new era of decentralized society.</p><p>Hey there, thanks for reading this far.</p><p><a href="https://plurality.my.canva.site/">Plurality</a> is a product that offers Decentralized Identity for the Decentralized Society.</p><p>If you like this story, don’t forget to follow our <a href="https://twitter.com/PluralityWeb3">twitter</a> and leave a clap. :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=242c931393de" width="1" height="1" alt=""><hr><p><a href="https://medium.com/blockchain-biz/plurality-decentralized-identity-for-the-decentralized-world-242c931393de">Plurality: Decentralized Identity for the Decentralized World</a> was originally published in <a href="https://medium.com/blockchain-biz">Blockchain Biz</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Connecting your Mobile Apps with your Web3 Identity]]></title>
            <link>https://medium.com/coinmonks/connecting-your-mobile-apps-with-your-web3-identity-55b7be30e407?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/55b7be30e407</guid>
            <category><![CDATA[walletconnect]]></category>
            <category><![CDATA[decentralized-identity]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[self-sovereign-identity]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Sun, 19 Mar 2023 11:44:15 GMT</pubDate>
            <atom:updated>2023-03-31T13:19:36.486Z</atom:updated>
            <content:encoded><![CDATA[<blockquote><strong>This is a short tutorial explaining how to get your android app’s requests signed from your web3 mobile wallet using wallet connect v2</strong></blockquote><p>Many people today prefer using their crypto wallets on their mobile phones. Not only are mobile apps easy to use and handy, but also come with the added benefit of being able to be linked with other mobile apps using a technique known as deep linking or app-to-app linking.</p><p>App-to-app linking allows one mobile app to interact with another mobile app. In the case of blockchain wallets, using deep linking, any mobile app can interact with the blockchain wallet and ask it to perform certain actions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/821/0*8LGXqylz8aIf4zMX.png" /><figcaption><a href="https://www.applicoinc.com/blog/deep-linking-important-mobile-app/">App-to-App Linking</a></figcaption></figure><p>Using this technique, we can connect the actions we do on any mobile app with our blockchain wallet.</p><p>The requesting app asks the blockchain wallet to sign certain actions, and if the blockchain wallet agrees to do so, the mobile app has a “written-consent” to perform this action.</p><p>This concept is powerful and can allow many interesting use cases to be developed. For example, using an identity app to send your identity information to a third-party along with the signed consent from your blockchain wallet. This would prove that the person who is performing the action has access to both the blockchain wallet and the identity wallet, thus providing a cryptographic proof that these belong to the same person.</p><h3>Mobile Linking with WalletConnect</h3><p>WalletConnect has been an established name in the web3 industry that connects different dapps and wallets. They have recently come out with the <a href="https://docs.walletconnect.com/2.0">version 2</a> of their SDK with better features.</p><p>In this tutorial, we will be creating an Android app using Kotlin and connecting it to a Trust Wallet mobile app using WalletConnect v2.</p><p><em>Note: Many wallets and dapps are still making the transition to wallet connect v2. As of 14th March, 2023, Metamask hasn’t completed the integration, therefore, we will be using Trust Wallet in this tutorial.</em></p><p>To follow this tutorial, you should have:</p><p>1. An android phone with developer options enabled</p><p>2. The android phone should have Trust Wallet installed and a test wallet should be setup on it</p><p>3. Android studio installed on your computer</p><p>4. Internet connection</p><p>5. Curiosity to learn something new 😊</p><p>So, let’s get started:</p><h3>Step 1: Create Android Project</h3><p>Create a new project in Android Studio. Select “Phone and Tablet” category and activity type as “Basic Activity”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/945/0*4VnJKX4jdKuI_PuR.png" /></figure><p>Fill in the name of the project and other details and finish creating the project.</p><h3>Step 2: Add dependencies in gradle files</h3><p>In root/build.gradle.ts</p><pre>allprojects {<br> repositories {<br>    mavenCentral()<br>    maven { url &quot;https://jitpack.io&quot; }<br> }<br>}</pre><p><em>Note: You might have to move this code to settings.gradle as sometimes settings.gradle is preferred over build.gradle when the app runs.</em></p><p>In app/build.gradle.kts</p><pre>implementation(&quot;com.walletconnect:android-core:1.11.1&quot;)<br>implementation(&quot;com.walletconnect:sign:2.9.1&quot;)<br>implementation(&quot;com.walletconnect:web3wallet:1.4.1&quot;)</pre><p>The current tutorial has been tested with the above versions. For most recent versions, you can visit <a href="https://docs.walletconnect.com/2.0/kotlin/web3wallet/installation">here</a>.</p><h3>Step 3: Create a CoreClient and SignClient object in the custom application class</h3><p>Now, to lay the foundations of the walletconnect, we need to setup our CoreClient object. This object must be created in the Application Class. Since in android the application class is an implicit class, therefore, you would not see it in your kotlin class files.</p><p>We need to create a new Kotlin class and inherit the application class to override it.</p><p>Right click on your Java folder, click new -&gt; Kotlin Class/File</p><p>Name the class whatever you want e.g. MyCustomApplication</p><p>This will create a barebones class for you like this:</p><pre>Class MyCustomApplication {<br>}</pre><p>Now, we need to inherit the class from Application Class and add our required methods</p><pre>class MyCustomApplication : Application() {<br>    // Called when the application is starting, before any other application objects have been created.<br>    // Overriding this method is totally optional!<br>    override fun onCreate() {<br>        super.onCreate()<br>        // Required initialization logic here!<br>    }<br>    // Called by the system when the device configuration changes while your component is running.<br>    // Overriding this method is totally optional!<br>    override fun onConfigurationChanged ( newConfig : Configuration) {<br>        super.onConfigurationChanged(newConfig)<br>    }<br>    // This is called when the overall system is running low on memory,<br>    // and would like actively running processes to tighten their belts.<br>    // Overriding this method is totally optional!<br>    override fun onLowMemory() {<br>        super.onLowMemory()<br>    }</pre><p>Once you have the methods in place, we can now create the WalletConnect’s CoreClient in the onCreate method.</p><pre>override fun onCreate() {<br>    super.onCreate()<br>    // Required initialization logic here!<br>    val projectId = &quot;&quot; //Get Project ID at https://cloud.walletconnect.com/<br>    val relayUrl = &quot;relay.walletconnect.com&quot;<br>    val serverUrl = &quot;wss://$relayUrl?projectId=$projectId&quot;<br>    val connectionType = ConnectionType.AUTOMATIC // or ConnectionType.MANUAL<br>    val appMetaData = Core.Model.AppMetaData(<br>        name = &quot;Test App&quot;,<br>        description = &quot;Kotlin App&quot;,<br>        url = &quot;Test App url&quot;,<br>        icons = listOf(&quot;https://gblobscdn.gitbook.com/spaces%2F-LJJeCjcLrr53DcT1Ml7%2Favatar.png?alt=media&quot;),<br>        redirect = getString(R.string.deep_link_url)  // Custom Redirect URI<br>    )<br>    CoreClient.initialize(<br>        relayServerUrl = serverUrl,<br>        connectionType = connectionType,<br>        application = this,<br>        metaData = appMetaData<br>    ) { error -&gt; Log.e(&quot;CoreClient_Initialization_Error&quot;, error.throwable.stackTraceToString()) }<br>    val init = Sign.Params.Init(core = CoreClient)<br>    SignClient.initialize(init) { error -&gt;<br>        Log.e(&quot;SignClient_Initialization_Error&quot;, error.throwable.stackTraceToString())<br>}</pre><p>Project ID needs to be created individually for each application from <a href="https://cloud.walletconnect.com/">https://cloud.walletconnect.com/</a></p><p>The relay URL and server URL are fixed values and need to be used as-is. The connection type can be automatic or manual, but we will be using automatic connection type.</p><p>In the appMetadata, the redirect is an important parameter. It tells the android app where to return when a response is received from the wallet application. The deep link url needs to be unique for your app and must follow a certain standard. For this tutorial, the deep link url is “kotlin-plurality-dapp-wc:/request”</p><p>Its important to register this deeplink in the navigation graph as well, which we will do in the next step.</p><p>Once we have all the parameters setup, we can then initialize the CoreClient using and SignClient using CoreClient.initialize and SignClient.initialize methods as shown in the code above.</p><h3>Step 4: Registering the deep link in the navigation graph</h3><p>You must register a deep link in the navigation graph (navigation/nav_graph.xml) with the same link that you used as redirect parameter in the CoreClient object. Inside the &lt;navigation&gt; tag, add the following.</p><pre>&lt;deepLink<br>    app:action=&quot;android.intent.action.VIEW&quot;<br>    app:uri=&quot;@string/deep_link_url&quot; /&gt;</pre><p>The deep_link_url string is “kotlin-plurality-dapp-wc:/request”. You can use it directly or add it in strings.xml file. Either way, it should be the same as the redirect parameter with which the CoreClient object was initialized.</p><h3>Step 5: Create buttons for actions</h3><p>Now we need to create two buttons for the two actions we will demonstrate in this tutorial. If you created a basic project, you will have a file layout/fragment_first.xml. Lets use this file to display the two buttons.</p><pre>&lt;Button<br>    android:id=&quot;@+id/button_pair&quot;<br>    android:layout_width=&quot;wrap_content&quot;<br>    android:layout_height=&quot;wrap_content&quot;<br>    android:text=&quot;@string/pair&quot;<br>    app:layout_constraintBottom_toBottomOf=&quot;parent&quot;<br>    app:layout_constraintEnd_toEndOf=&quot;parent&quot;<br>    app:layout_constraintStart_toStartOf=&quot;parent&quot;<br>    app:layout_constraintTop_toBottomOf=&quot;@id/textview_first&quot; /&gt;</pre><pre>&lt;Button<br>    android:id=&quot;@+id/button_sign&quot;<br>    android:layout_width=&quot;wrap_content&quot;<br>    android:layout_height=&quot;wrap_content&quot;<br>    android:text=&quot;@string/request_sign&quot;<br>    app:layout_constraintBottom_toBottomOf=&quot;parent&quot;<br>    app:layout_constraintEnd_toEndOf=&quot;parent&quot;<br>    app:layout_constraintStart_toStartOf=&quot;parent&quot;<br>    app:layout_constraintTop_toBottomOf=&quot;@id/button_pair&quot; /&gt;</pre><p>Adjust as per your project but we need two buttons which we will use to perform the pairing and signing operations. The buttons should roughly look like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/294/0*rGabl3IG0w-5li3U.png" /></figure><p>Now we need to register clicks for these buttons so go to java/FirstFragment.kt file and inside the onViewCreated function, register the clicks for these buttons</p><pre>override fun onViewCreated(view: View, savedInstanceState: Bundle?) {<br>    super.onViewCreated(view, savedInstanceState)<br>    binding.buttonPair.setOnClickListener {<br>        //logic goes here<br>    }<br>    binding.buttonSign.setOnClickListener {<br>        //logic goes here<br>    }<br>}</pre><h3>Step 6: Establishing the connection between android app and wallet</h3><p>Now let’s dive into details on how to connect our app and the wallet. To do this, we will add the code in the buttonPair’s onclicklistener.</p><pre>override fun onViewCreated(view: View, savedInstanceState: Bundle?) {<br>    super.onViewCreated(view, savedInstanceState)<br>    var apprSession: Sign.Model.ApprovedSession? = null<br>    var deeplinkPairingUri: String? = null<br>    binding.buttonPair.setOnClickListener {<br>        // for proposer to create inactive pairing<br>        val pairing = CoreClient.Pairing.create()<br>        deeplinkPairingUri = pairing!!.uri<br>        val dappDelegate = object : SignClient.DappDelegate {<br>            override fun onSessionApproved(approvedSession: Sign.Model.ApprovedSession) {<br>                apprSession = approvedSession<br>                // Triggered when dapp receives the session approval from wallet<br>                Log.d(&quot;Session_Approved&quot;, &quot;Session was approved by the wallet&quot;)<br>                Log.d(&quot;Session_Topic&quot;, &quot;Approved session&#39;s topic is: &quot;+ approvedSession.topic)<br>            }<br>            override fun onSessionRejected(rejectedSession: Sign.Model.RejectedSession) {<br>                // Triggered when Dapp receives the session rejection from wallet<br>                Log.d(&quot;Session_Rejected&quot;, &quot;The wallet rejected the session&quot;)<br>            }<br>            override fun onSessionUpdate(updatedSession: Sign.Model.UpdatedSession) {<br>                // Triggered when Dapp receives the session update from wallet<br>                Log.d(&quot;Session_Updated&quot;, updatedSession.toString())<br>            }<br>            override fun onSessionExtend(session: Sign.Model.Session) {<br>                // Triggered when Dapp receives the session extend from wallet<br>                Log.d(&quot;Session_Extended&quot;, session.toString())<br>            }<br>            override fun onSessionEvent(sessionEvent: Sign.Model.SessionEvent) {<br>                // Triggered when the peer emits events that match the list of events agreed upon session settlement<br>                Log.d(&quot;Received_Session_Event&quot;, sessionEvent.toString())<br>            }<br>            override fun onSessionDelete(deletedSession: Sign.Model.DeletedSession) {<br>                // Triggered when Dapp receives the session delete from wallet<br>                Log.d(&quot;Session_Deleted&quot;, deletedSession.toString())<br>            }<br>            override fun onSessionRequestResponse(response: Sign.Model.SessionRequestResponse) {<br>                // Triggered when Dapp receives the session request response from wallet<br>                Log.d(&quot;Received_Session_Request_Response&quot;, response.toString())<br>            }<br>            override fun onConnectionStateChange(state: Sign.Model.ConnectionState) {<br>                //Triggered whenever the connection state is changed<br>                Log.d(&quot;Connection_State_Changed&quot;, state.toString())<br>            }<br>            override fun onError(error: Sign.Model.Error) {<br>                // Triggered whenever there is an issue inside the SDK<br>                Log.e(&quot;Error_In_SignClient_SDK&quot;, error.toString())<br>            }<br>        }<br>        SignClient.setDappDelegate(dappDelegate)<br>        val chains = listOf(&quot;eip155:1&quot;, &quot;eip155:137&quot;)<br>        val methods = listOf(&quot;eth_sendTransaction&quot;, &quot;eth_signTransaction&quot;, &quot;eth_sign&quot;, &quot;personal_sign&quot;, &quot;eth_signTypedData&quot;,&quot;get_balance&quot;)<br>        val events = listOf(&quot;accountsChanged&quot;, &quot;chainChanged&quot;, &quot;connect&quot;, &quot;disconnect&quot;)<br>        val namespaces = mapOf(&quot;eip155&quot; to Sign.Model.Namespace.Proposal(chains, methods, events))<br>        // for proposer to create a session<br>        val connectParams = Sign.Params.Connect(namespaces,null,null, pairing!!)<br>        SignClient.connect(connectParams,<br>            onSuccess = { -&gt; /*Session proposal was being sent successfully over pairing topic*/<br>                Log.d(&quot;SignClient_Connect_Proposal_Send_Success&quot;, &quot;The sign client connection proposal was successfully sent to the wallet&quot;)},<br>            onError = { error -&gt; /*callback for error while sending session proposal*/<br>                Log.e(&quot;CONNECTION_ERROR&quot;, error.throwable.stackTraceToString()) })<br>        startActivity(Intent(Intent.ACTION_VIEW, deeplinkPairingUri!!.toUri()))<br>    }<br>}</pre><p>The most important function is the CoreClient.Pairing.create() which initiates the connection between the two apps. The SignClient.DappDelegate is then created in order to receive responses from the wallet app. Whenever our app requests something and the wallet app responds, the response event will be caught by one of the functions in this class.</p><p>Once the SignClient has registered the DappDelegate class using SignClient.setDappDelegate(dappDelegate)</p><p>Then we need to create a session request. Session request means that our app will ask to create a session with the wallet using certain parameters i.e. which chains, which methods, which events should the wallet allow. The wallet will see what permissions are being asked and will approve or reject the session accordingly.</p><p>We have only used required namespaces not optional namespaces in this tutorial but you are free to play around with the namespaces and permissions that are required by using different parameter values.</p><p>Finally, the signclient will create a connect session request using SignClient.connect function.</p><p>However, for the app to move from its own screen to the wallet’s screen, we need to start the deeplink intent activity using</p><p>startActivity(Intent(Intent.ACTION_VIEW, deeplinkPairingUri!!.toUri()))</p><p>Without this step, your app will not be able to open the wallet app.</p><p>Now, you can deploy the application to your android phone and click the pairing button. It will open the list of all wallets on your phone that are able to handle this request. In this tutorial we have used trust wallet because not all wallets have completely migrated to walletconnect v2.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/311/0*_DCR5ax8p5tIZcoE.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/261/0*veNnd0h7Dg5RbXdk.png" /></figure><p>You can also view your session connections from the settings in trust wallet</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/314/0*kdgBnXUC4I31YFkN.png" /></figure><h3>Step 7: Requesting the wallet to sign a message</h3><p>Now, we will demonstrate how our app can ask for a wallet for a signature using its private key. The prerequisite is that the two apps should already have a previous connection.</p><p>We will use eth_personalsign method to sign a simple human readable message. For more complex requests, wallet connect also supports EIP_712 signatures but those are out of the scope of this tutorial.</p><p>For the signing request, we will use buttonSign’s onclicklistener.</p><pre>binding.buttonSign.setOnClickListener {<br>  val sessionTopic = apprSession!!.topic<br>    val method = &quot;personal_sign&quot;<br>    val account = apprSession!!.accounts[0]<br>    val params = SignUtils.getPersonalSignBody(account)<br>    val chainId = &quot;eip155:1&quot;<br>    val expiry = (System.currentTimeMillis() / 1000) + TimeUnit.SECONDS.convert(7, TimeUnit.DAYS)<br>    val requestParams = Sign.Params.Request(sessionTopic,method,params,chainId, expiry);<br>    val activeConnection = checkNotNull(SignClient.getActiveSessionByTopic(sessionTopic))<br>    Log.d(&quot;Connection is active&quot;, activeConnection.toString())<br>    SignClient.request(requestParams,<br>        onSuccess = { req: Sign.Model.SentRequest -&gt;<br>            /* callback for success while sending request over session */<br>            Log.d(&quot;Sign_Client_Request_Send_Success&quot;, req.toString())<br>        },<br>        onError = { error: Sign.Model.Error -&gt;<br>            /* callback for error while sending request over session */<br>            Log.e(&quot;Sign_Client_Request_Send_Error&quot;, error.throwable.stackTraceToString()) })<br>    startActivity(Intent(Intent.ACTION_VIEW, deeplinkPairingUri!!.toUri()))<br>}</pre><p>First we need to create a signing request. To do so, we need a method (“personal_sign”), a chainId and in the params, we need properly formatted message. To do the proper formatting, create a separate class SignUtils and add a method in it getPersonalSignBody as shown in the next step. Once all the parameters are in place we can use SignClient.request function to create the signing request and then trigger the deeplink intent activity using the</p><p>startActivity(Intent(Intent.ACTION_VIEW, deeplinkPairingUri!!.toUri()))</p><p>The SignUtil class looks like the following:</p><pre>class SignUtils {<br>// Companion objects is how you define static methods in kotlin<br>    // To learn more visit here: https://kotlinlang.org/docs/object-declarations.html#companion-objects<br>    companion object {<br>        fun getPersonalSignBody(account: String): String {<br>            val msg = &quot;My email is john@doe.com - ${System.currentTimeMillis()}&quot;.encodeToByteArray()<br>                .joinToString(separator = &quot;&quot;, prefix = &quot;0x&quot;) { eachByte -&gt; &quot;%02x&quot;.format(eachByte) }<br>            return &quot;[\&quot;$msg\&quot;, \&quot;$account\&quot;]&quot;<br>        }<br>}</pre><p>And that’s it!</p><p>Now if you run the app and click on the Request Sign from Wallet button, you will be redirected to the wallet like before which will show you the signing request</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/309/0*6Z6wFooTRKbtEnoU.png" /></figure><p><em>Note: Sometimes the signing request does not show the first time, so in this case try once more to see it. This is a known issue that will be resolved once the migrations to v2 will be complete.</em></p><p>The android project for this tutorial can be found <a href="https://github.com/Web3-Plurality/WalletConnect">here</a></p><p>Hey there, thanks for reading this far.</p><p><a href="https://plurality.my.canva.site/">Plurality</a> is a product that offers Decentralized Identity for the Decentralized Society.</p><p>If you like this story, don’t forget to follow our <a href="https://twitter.com/PluralityWeb3">twitter</a> and leave a clap. :)</p><blockquote><em>New to trading? Try </em><a href="https://medium.com/coinmonks/crypto-trading-bot-c2ffce8acb2a"><em>crypto trading bots</em></a><em> or </em><a href="https://medium.com/coinmonks/top-10-crypto-copy-trading-platforms-for-beginners-d0c37c7d698c"><em>copy trading</em></a><em> on </em><a href="https://medium.com/coinmonks/crypto-exchange-dd2f9d6f3769"><em>best crypto exchanges</em></a></blockquote><blockquote>Join Coinmonks<a href="https://t.me/coincodecap"> Telegram Channel</a> and<a href="https://www.youtube.com/c/coinmonks/videos"> Youtube Channel</a> get daily <a href="http://coincodecap.com/">Crypto News</a></blockquote><h3>Also, Read</h3><ul><li><a href="https://medium.com/coinmonks/free-crypto-signals-48b25e61a8da">Free Crypto Signals</a> | <a href="https://medium.com/coinmonks/crypto-trading-bot-c2ffce8acb2a">Crypto Trading Bots</a></li><li>An ultimate guide to <a href="https://medium.com/coinmonks/leveraged-token-3f5257808b22">Leveraged Token</a></li><li><a href="https://medium.com/coinmonks/top-17-folding-electric-bikes-5e296f0918cb">16 Best Folding Electric Bikes</a></li><li><a href="https://medium.com/coinmonks/the-28-best-electric-bikes-review-and-buying-guide-in-2023-7bb3146cb403">28 Best Electric Bikes Review</a></li><li>Top 3 <a href="https://medium.com/coinmonks/top-3-binance-futures-trading-bots-e6031f84b3f9">Binance Futures Trading Bots</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=55b7be30e407" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/connecting-your-mobile-apps-with-your-web3-identity-55b7be30e407">Connecting your Mobile Apps with your Web3 Identity</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Risks of using Zero Knowledge Proofs for Identity Verification on Blockchains]]></title>
            <link>https://medium.com/blockchain-biz/risks-of-using-zero-knowledge-proofs-for-identity-verification-on-blockchains-125943788887?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/125943788887</guid>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[polygon-id]]></category>
            <category><![CDATA[self-sovereign-identity]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[plurality]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Tue, 07 Mar 2023 13:42:58 GMT</pubDate>
            <atom:updated>2023-04-01T15:20:59.154Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6-EGeLP0IBz8TMVr.jpeg" /><figcaption>Image from <a href="https://pixabay.com/users/geralt-9301/">geralt-9301</a> at <a href="https://pixabay.com/">pixabay</a></figcaption></figure><p>Zero-Knowledge Proofs (ZKPs) have been considered a promising solution for privacy-preserving identification due to their ability to prove specific attributes without revealing the user’s identity. The concept of ZKPs has gained popularity as a way to address privacy concerns in identity verification.</p><p>ZKPs allow for the creation of cryptographic proofs that demonstrate the possession of certain information, such as age or qualifications, without revealing the information itself. They are generally perceived as a desirable solution for privacy-sensitive public applications, such as online identity verification, where users are often required to share personal information in order to prove their identity. Some public blockchains like Polygon are also looking into zero-knowledge proofs as a way to identify users on-chain (<a href="https://polygon.technology/blog/introducing-polygon-id-zero-knowledge-own-your-identity-for-web3">Link</a>).</p><p>Here’s a hypothetical scenario where a user can prove something about him/herself with zero knowledge to a dApp:</p><p>1. A user, let’s call him John, wants to verify himself on a blockchain smart contract in a zero-knowledge way.</p><p>2. The smart contract requires that John prove that he is over the age of 21.</p><p>3. John uses a zero-knowledge proof to generate a cryptographic proof that he is over the age of 21, without revealing his actual age or any other personal information.</p><p>4. The smart contract verifies the proof, and because it was generated in a zero-knowledge way, it has no information about John’s identity other than the fact that he is over the age of 21.</p><p>5. The smart contract allows John to access its features or perform actions that are restricted to users over the age of 21, such as making investments or participating in age-restricted online activities.</p><p>6. Throughout the process, John’s personal information remains private and secure, as the zero-knowledge proof only reveals the information necessary to verify his age.</p><blockquote><strong><em>Reputation is an important aspect of identity verification but ZKPs un-link the proof from the reputation — thus creating a blind-spot</em></strong></blockquote><p>Before we dig deeper into the on-chain identification using ZKPs, let us discuss the concept of identity verification in Self Sovereign Identity (SSI). Reputation is a crucial aspect of identity verification and trust-building processes. A person’s reputation is tied to their real-life identity or previous actions. It shows the trust others have in their ability to fulfill their obligations and behave in a certain manner. It is a logical assumption that the users want to protect their identity and make sure it is not used by someone else for some malicious purpose due to the <em>staked reputation</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/0*SK24m_3uec8UXUjK.png" /><figcaption>Visual representation of a ZKP Blackbox converting claims to blind proofs (Image Credits: <a href="https://ieeexplore.ieee.org/document/9031545">https://ieeexplore.ieee.org/document/9031545</a>)</figcaption></figure><p>However, ZKPs provide privacy benefits by allowing the user to prove their identity without revealing any personally identifiable information (PII). The logical reduction of claims made by ZKPs reduces the strength of the claims and makes them un-linkable with the user’s identity, negating nonrepudiation and enabling credential sharing via proxy. This privacy protection can create a blind spot in verification, as the verifier cannot trace the proof back to the user. This blind spot undermines the identity verification process’s trust without risking the prover’s reputation.</p><blockquote><strong><em>If the identity owner is compromised or is ‘evil’ and decides to sell the zero-knowledge proofs the end-to-end trust cannot be established.</em></strong></blockquote><p>In a concrete scenario where the user sells their credential to a malicious actor, the verifier will not be able to trace the malicious actor back to the user. As a result, trust in the user’s reputation can not be established due to the increased risk of fraudulent activities. For example, a malicious user could impersonate John and collude together with John to present a zero-knowledge proof to a verifier smart contract using John’s credentials, claiming that they are over the age of 21. These potential risks associated with using a co-relation resistant DID in combination with ZKPs can better be explained by reconsidering our example scenario:</p><ol><li>John holds a credential that proves he is over the age of 21.</li></ol><p>2. Bob wants to access age-restricted content on a blockchain-based platform.</p><p>3. John creates a DID and creates a ZKP that proves he is over the age of 21 using his valid credentials (VCs).</p><p>4. John does not want to give the access to his original VC to Bob but still wants to contribute to the fake verification of Bob. So he decides to sell his ZKP and DID to Bob.</p><p>5. Since John’s ZKP is un-linkable with his identity, he is able to sell his ZKP without risking his own reputation or original credential.</p><p>6. Bob uses John’s DID to present the ZKP to the smart contract, claiming that he is over the age of 21.</p><p>7. The smart contract relies on the reputation of the DID and accepts the ZKP, granting Bob access to the age-restricted content.</p><p>8. Bob uses access to restricted content for malicious purposes, potentially causing harm to the platform or its users.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/823/0*8IoSIx4Awqi0lTPP.png" /></figure><p>John sells ZKPs via a proxy service to Bob and other third parties (Image Credits: <a href="https://ieeexplore.ieee.org/document/9031545">https://ieeexplore.ieee.org/document/9031545</a>)</p><p>In this scenario, the use of co-relation-resistant DIDs exacerbates the risk of exploitation through the blind spot created by ZKPs. In order to minimize this risk, it is important to consider implementing additional measures, such as reputation systems or manual verification processes, to ensure the credibility of the user presenting the proof.</p><p>In conclusion, reputation is crucial in identification systems, we can trust the identity owners in a permissionless system only due to their staked reputation. Identity verification using ZKPs poses a blind spot problem that can undermine the reliability and security of the system if not addressed explicitly. These scenarios highlight the trade-off between privacy and trust in ZKP-based identification systems and the need to balance these factors to ensure their secure and effective use in blockchain verifiers.</p><p>The trust paradigm and the blindspot presented in this article is originally stated in the paper “Zero-Knowledge Proofs Do Not Solve the Privacy-Trust Problem of Attribute-Based Credentials: What if Alice Is Evil?” (<a href="https://ieeexplore.ieee.org/document/9031545">Link</a>)</p><p>Hey there, thanks for reading this far.</p><p><a href="https://plurality.my.canva.site/">Plurality</a> is a product that offers Decentralized Identity for the Decentralized Society.</p><p>If you like this story, don’t forget to follow our <a href="https://twitter.com/PluralityWeb3">twitter</a> and leave a clap. :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=125943788887" width="1" height="1" alt=""><hr><p><a href="https://medium.com/blockchain-biz/risks-of-using-zero-knowledge-proofs-for-identity-verification-on-blockchains-125943788887">Risks of using Zero Knowledge Proofs for Identity Verification on Blockchains</a> was originally published in <a href="https://medium.com/blockchain-biz">Blockchain Biz</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[New paradigm of dApps enabled by SSI]]></title>
            <link>https://medium.com/@plurality.web3/new-paradigm-of-dapps-enabled-by-ssi-352211c58f3c?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/352211c58f3c</guid>
            <category><![CDATA[decentralized-identity]]></category>
            <category><![CDATA[kyc-verification]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[self-sovereign-identity]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Tue, 07 Mar 2023 13:37:24 GMT</pubDate>
            <atom:updated>2023-03-07T13:37:24.767Z</atom:updated>
            <content:encoded><![CDATA[<p>This is the part 3 in a 3-part series. You can find the <a href="https://medium.com/@plurality.web3/improving-kyc-processes-using-self-sovereign-identity-ab0f984e93d9">part 1</a> here and <a href="https://medium.com/@plurality.web3/self-sovereign-kyc-in-blockchain-5ccceb5d0ce7">part 2</a> here.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QqoxR_BrFqM7lvof.png" /><figcaption>Vision of a decentralized society. Image from <a href="https://pixabay.com/illustrations/social-media-social-marketing-5187243/">Pixabay</a></figcaption></figure><p>In the previous parts of this series, we talked about the concepts of Self-Sovereign Identity, how it differs from traditional KYC methods, and the benefits of using SSI concepts in blockchain for identification.</p><p>In this part, we would talk about the plethora of use cases that would open in the blockchain space if SSI based KYC processes come to the public blockchain world.</p><p>Currently, there is a huge gap in how we use centralized web2 in our daily lives with the decentralized web3.</p><p>In web2, you can:</p><ol><li>Use search engines to search information.</li><li>Use online banking to interact with your bank account</li><li>Use learning portals to acquire new skills</li><li>Use social media to stay connected with the world</li><li>Use job portals to get jobs anywhere in the world</li><li>Use food delivery apps to get food at your doorstep</li><li>Use online fashion retail stores to order your dresses</li></ol><p>And so on…</p><p>On the other hand, in web3, you can:</p><ol><li>Buy crypto assets in a speculative market</li><li>Swap &amp; lend crypto assets</li></ol><p>That’s just about it! In the current scenario, the maximum web3 can offer is replace your financial interactions in the web2 world.</p><blockquote><em>Web3 is no more than a bank account, for now.</em></blockquote><p>If you think about a true decentralized society, web3 has a lot of catching up to do. One of the critical reasons that web3 cannot currently offer the web2 functionalities in a decentralized manner is because <em>there is no decentralized way to identify people in web3.</em></p><p>You can do a centralized KYC on exchanges but natively there is pseudonymity in the blockchain. You cannot tell which address is which person simply by looking at the blockchain.</p><p>Pseudonymity is one of the most important and ground-breaking features of blockchain. However, it is a double-edged sword. While it offers a border-less anonymous way to transfer assets, it is also the reason why so much of the activity on blockchain is under stringent compliance regulations.</p><blockquote><em>With the current legal systems in place, pseudonymity is hindering web3 to reach its potential of a decentralized society.</em></blockquote><p>But does that mean we should let go of the ideals of decentralization just to be compliant? Of course not.</p><p>One way how web3 can replicate and even exceed the offerings of web2 while remaining compliant is to provide a native way to provide user-centric, privacy-preserving, decentralized KYC solutions.</p><p>Such a solution should not in any way replicate the same problems of centralization that web2 KYC solutions have. It should be decentralized, and the user should decide when, to whom and how much information should be revealed.</p><p>Therefore, an SSI based web3 native KYC solution can push web3 into the next generation where it can replace web2 completely and provide a better alternative for a decentralized society.</p><p>While a solution like this could open the possibility of a plethora of new innovative applications, it could also improve existing applications.</p><h3>Existing solutions that can be improved using Self Sovereign KYC</h3><ol><li><em>Decentralized exchanges</em> could use decentralized KYC instead of centralized KYC, saving both cost and the ideals of decentralization</li><li><em>Verification on social media</em> could be made privacy-preserving platforms e.g., Twitter’s blue tick</li><li><em>Airdrops </em>could become fairer by connecting them to real life identity of person so that the same person cannot get airdrop more than once</li><li><em>Decentralized Autonomous Organizations (DAOs)</em> could be made more decentralized by ensuring the uniqueness of the real-life identity of addresses involved in a DAO</li><li><em>Web3 grants </em>could be distributed more fairly by connecting them to the real-life identity of the grant accepters</li><li><em>Decentralized tele-health</em> could be created where patients could disclose medical records to the medical personnel using selective disclosure</li><li><em>Decentralized elections</em> where people could vote by showing that they possess a valid identity card</li></ol><p>etc.</p><h3>New solutions that can be created using Self Sovereign KYC</h3><ol><li><em>Inheritance solutions</em> where the crypto assets of a person can be legally moved to the next of kin after death, upholding the local state laws</li><li><em>Decentralized social media</em> connected to the on-chain wallets of the user and identity information revealed only as much as wanted by the user</li><li><em>Decentralized job marketplaces</em> where people could reveal credentials to the prospective employers and get jobs</li><li><em>Decentralized mortgages</em> where people could use real life assets as collateral to get loans, the same way they do today using banks</li><li><em>Decentralized marketplaces</em> where people could buy and sell items peer to peer, demanding the other person to verify themselves before a trade if and how they require</li><li><em>Decentralized dating apps</em> where it’s up to the people when and how they want to identity the person they are contacting</li></ol><p>And the list goes on…</p><p>To cut the long story short, a native identification solution for web3 adhering to the principles of self-sovereign identity would not only improve the current identification solutions in web3 but would also pave the way for a new generation of innovative solutions in web3.</p><p>Hey there, thanks for reading this far.</p><p><a href="https://plurality.my.canva.site/">Plurality</a> is a product that offers Decentralized Identity for the Decentralized Society.</p><p>If you like this story, don’t forget to follow our <a href="https://twitter.com/PluralityWeb3">twitter</a> and leave a clap. :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=352211c58f3c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Self Sovereign KYC in Blockchain]]></title>
            <link>https://medium.com/@plurality.web3/self-sovereign-kyc-in-blockchain-5ccceb5d0ce7?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/5ccceb5d0ce7</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[decentralized-identity]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[kyc-verification]]></category>
            <category><![CDATA[self-sovereign-identity]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Tue, 07 Mar 2023 13:32:45 GMT</pubDate>
            <atom:updated>2023-03-07T13:37:46.142Z</atom:updated>
            <content:encoded><![CDATA[<p>This is the part 2 in a 3 part series. You can find the first part <a href="https://medium.com/@plurality.web3/improving-kyc-processes-using-self-sovereign-identity-ab0f984e93d9">here</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/945/0*Qpz-eZp9uae4QE0_.png" /><figcaption>Image from <a href="https://hpi.de/meinel/lehre/master-projects/self-sovereign-identity-with-blockchain-technology.html">here</a></figcaption></figure><p>In our last article, we talked about how the current centralized KYC systems can be improved using Self-Sovereign Identity (SSI). We explained that by using SSI, not only can the cost of KYC be reduced, but also the control can be provided back to the users. Users can decide when, to whom and how much of their information is being shared with external parties. Lastly, we made a case that over all the KYC process needs to become decentralized due to data breach possibilities in the centralized system.</p><blockquote>SSI can improve KYC process by introducing decentralization, reducing cost by reuse and by returning control back to identity owner.</blockquote><p>But what exactly is this new fancy term Self-Sovereign Identity, and what’s so special about it? Let’s get the ball rolling…</p><h3>The mumbo jumbo of Self Sovereign Identity</h3><p>Self-sovereign identity refers to a system of identity management in which individuals or organizations have full control over their own digital identity and personal data. This means that individuals are able to choose what personal information they share, with whom they share it, and for what purpose.</p><blockquote><em>In SSI, individuals decide what, to whom, and how much to share!</em></blockquote><p>SSI is attractive because it improves privacy and reduces the risk of data breaches or misuse. With traditional identity systems, personal information is often stored in centralized databases that are vulnerable to hacking or data leaks. In contrast, self-sovereign identity systems use decentralized technologies such as blockchain to store and manage identity data, which can increase security and privacy.</p><p>I know what you are thinking right now: that it’s <em>poh-tay-to / poh-taa-to.</em> When we are presenting our identity information to a third party, the information is being shared anyways so what exactly is the difference here?</p><p>The answer is in two terms: <em>Selective Disclosure and Decentralized Identifiers.</em></p><h3>Selective Disclosure</h3><p>Selective disclosure refers to the ability of an individual to control which pieces of their personal identity information they share with others. In SSI systems, individuals decide which aspects of their identity they want to reveal to others, while still being able to participate in online interactions and transactions that require some level of identity verification. Selective disclosure is an important feature of SSI systems because it allows individuals to balance the need for privacy with the need to verify their identity in certain situations.</p><blockquote><em>Selective disclosure balances the need for privacy with the need for verification</em></blockquote><p>As an example, think of yourself trying to prove that you were born in a certain state using your identity card. In a traditional KYC system, you will need to present your entire identity card since there is simply no way to split or cut information out of the identity card.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/914/0*AogmTTrV95DGu0-V.png" /><figcaption>Full disclosure vs Selective disclosure</figcaption></figure><p>However, this provision is baked into the protocols of SSI and you can choose to disclose as little identity information as required.</p><h3>Decentralized Identifiers (DIDs)</h3><p>A DID is a unique identifier used specifically to identify an individual or organization in an SSI system. It is stored on a decentralized platform, such as a blockchain, and can be used to authenticate identity, verify attributes, and establish trust relationships. DIDs are cryptographically signed and can be used to prove the authenticity and ownership of various types of digital assets, such as documents, transactions, or certificates.</p><p><strong>Correlation Resistance</strong></p><p>Correlation resistance is an important property of decentralized identifiers (DIDs) that helps to protect privacy. It refers to the ability of a DID to resist being correlated with the identity of the owner. This is achieved by using a decentralized platform, such as a blockchain, to store and manage the DID. Because the decentralized platform is distributed and decentralized, it is more difficult for third parties to track and correlate the DID with the identity of the owner.</p><p>In other words, I can have 10 DIDs that I use for 10 different online interactions, and nobody will know that these 10 different interactions are done by the same person, unless I specifically want to prove it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/430/0*yh_N4u78R8Mwip4D.png" /><figcaption>Different DIDs for different interactions</figcaption></figure><p>In the context of Know Your Customer (KYC) processes, correlation resistance can be useful because it allows individuals or organizations to share their identity information in a secure and private way. For example, if a customer provides their DID to a financial institution as part of a KYC process, the institution can verify the identity of the customer without learning anything else about the customer’s personal information. This can help protect the customer’s privacy and reduce the risk of identity theft or fraud.</p><p><strong>Relationship between DID and Blockchain Address</strong></p><p>As opposed to a DID, a blockchain address is a unique identifier that is used to identify a specific blockchain account or wallet. It is usually a long, alphanumeric string that is associated with a particular blockchain network, such as Bitcoin or Ethereum. Blockchain addresses are used to send and receive cryptocurrency or other digital assets, and they can also be used to store and manage these assets.</p><p>There is often a relationship between a DID and a blockchain address, in that a DID may be associated with a particular blockchain address. For example, an individual may use their DID to prove their identity and ownership of a particular blockchain address. In this case, the DID would act as a sort of “identity layer” on top of the blockchain address, enabling the individual to prove their identity and ownership of the blockchain assets associated with the address.</p><p>Overall, DIDs and blockchain addresses are both useful tools for identity management and asset management in the digital world. They each serve different purposes and are used in different contexts, but they can also be used together to enhance the security, privacy, and verifiability of various digital transactions and processes.</p><blockquote><em>To bring our entire (social, personal and professional) identities on chain, we have to use a combination of blockchain addresses and DIDs to make this possible.</em></blockquote><p>If we use only blockchain address to create an identity system on chain, we will end up creating solutions that have same problems that the current systems have, just in a different form.</p><p>In the <a href="https://medium.com/@plurality.web3/new-paradigm-of-dapps-enabled-by-ssi-352211c58f3c">next part</a>, we will talk about all the use cases that can be possible if we create an on-chain privacy preserving identity system. Stay tuned.</p><p>Hey there, thanks for reading this far.</p><p><a href="https://plurality.my.canva.site/">Plurality</a> is a product that offers Decentralized Identity for the Decentralized Society.</p><p>If you like this story, don’t forget to follow our <a href="https://twitter.com/PluralityWeb3">twitter</a> and leave a clap. :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5ccceb5d0ce7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Improving KYC Processes using Self-Sovereign Identity]]></title>
            <link>https://medium.com/@plurality.web3/improving-kyc-processes-using-self-sovereign-identity-ab0f984e93d9?source=rss-a42541e1485e------2</link>
            <guid isPermaLink="false">https://medium.com/p/ab0f984e93d9</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[kyc-verification]]></category>
            <category><![CDATA[self-sovereign-identity]]></category>
            <category><![CDATA[decentralized-identity]]></category>
            <dc:creator><![CDATA[Plurality]]></dc:creator>
            <pubDate>Tue, 07 Mar 2023 13:22:46 GMT</pubDate>
            <atom:updated>2023-03-07T13:33:22.774Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/945/0*eiyO5z7sMU4VovQ5.png" /><figcaption>Image from <a href="https://pixabay.com/users/ar130405-423602/">ar130405</a> at <a href="https://pixabay.com/">pixabay</a></figcaption></figure><p>KYC checks are a vital component of financial regulation that help to prevent money laundering and terrorist financing. These checks are required for financial service providers, banks, and blockchain-based businesses to verify the identity of their customers and assess any potential risks they may pose. Traditional KYC methods, such as manual and online identity verification, video, and biometrics, can have limitations, such as a high risk of errors and duplicated efforts.</p><h4>Centralization is a bad idea — especially when it comes to identity</h4><p>Currently, the security of verification comes from a centralized organization that verifies and stores the identity information of a person. This centralized party then relays this information to the business that requested the KYC checks and lets them know which users are verified and which are not. A classic example of this is using centralized KYC providers or in the web world, using oAuth protocol to onboard users.</p><p>These approaches have served us well and long. However, they come with certain drawbacks:</p><p>1. The centralized party holding all the identity information can become a honeypot for attackers</p><p>2. More than necessary identity information is relayed to businesses who only need to know whether to grant or deny access to a certain individual based on the KYC check</p><p>3. User has no control over when, to whom, and how much of his identity information is being revealed</p><h4>Duplication in verification: twice the effort, twice the cost</h4><p>Most KYC vendor charges per customer. Even if a meager amount of $1 is charged for the KYC of a single customer, onboarding 1 million customers would mean paying a million just for onboarding!</p><p>This is not the end of the problem. Every new business must pay for the KYC of the customer to its platform even if that customer has been KYC’ed 10 times before.</p><p>In the current KYC systems, there is no provision of reusing the previously done verifications.</p><p><strong>How Self-Sovereign Identity can solve the above problems</strong></p><p>Know Your Customer (KYC) checks and Self-sovereign identity are closely related concepts that are both enabled by blockchain technology. Self-sovereign identity refers to the use of blockchain to enable individuals or organizations to prove their identity in a secure, privacy-preserving, and decentralized manner. This can be used for a variety of purposes, including access control, secure online transactions, and, most relevant to this context, KYC checks.</p><blockquote>Self-sovereign identity represents a promising alternative to traditional KYC methods.</blockquote><p>By using blockchain to store and verify identity information, self-sovereign identity allows individuals to own and control their own digital identities, rather than relying on third parties to verify their identity. This gives individuals more control over their personal information and reduces the need for businesses to collect and store sensitive data. Self-sovereign identity can also improve the efficiency and accuracy of KYC checks, as individuals can use their digital identities to provide verifiable credentials that can be easily verified by businesses.</p><p>Self-sovereign KYC is a specific application of self-sovereign identity that uses blockchain technology to facilitate KYC checks. In traditional KYC processes, individuals typically must provide proof of their identity to a verifier, who then assesses their risk profile. However, with self-sovereign KYC, businesses can use a simple token to verify that an individual has already been checked by a specific verifier. This reduces the amount of personal information that businesses need to collect and store, as well as the number of parties that need to handle this data. Self-sovereign KYC also minimizes the risk of data breaches, as only the verifier needs to store the individual’s credentials, and they must have robust cybersecurity measures in place to protect this information.</p><p>Overall, the integration of self-sovereign identity and KYC can help to create a more secure, transparent, and efficient financial system. By using blockchain to facilitate the verification of identity and risk assessment, businesses can streamline their processes and improve the accuracy of their risk assessment efforts. They can also save cost by reusing the previously done verifications. At the same time, self-sovereign identity empowers individuals to own and control their own digital identities, giving them greater control over their personal information and reducing the risk of identity fraud.</p><p>In the <a href="https://medium.com/@plurality.web3/self-sovereign-kyc-in-blockchain-5ccceb5d0ce7">next part</a> of this series, we talk about what self-sovereign identity really means and how they provide a better alternative to centralized KYC using the powerful concept of Decentralized Identifiers (DIDs).</p><p>Hey there, thanks for reading this far.</p><p><a href="https://plurality.my.canva.site/">Plurality</a> is a product that offers Decentralized Identity for the Decentralized Society.</p><p>If you like this story, don’t forget to follow our <a href="https://twitter.com/PluralityWeb3">twitter</a> and leave a clap. :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ab0f984e93d9" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>