Skiff by Andrew Milich | Devcon Bogotá
Devcon·Sat, Oct 7, 2023, 12:00 AM
Visit the https://archive.devcon.org/ to gain access to the entire library of Devcon talks with the ease of filtering, playlists, personalized suggestions, decentralized access on Swarm, IPFS and more. https://archive.devcon.org/archive/watch/6/skiff/ . Speaker(s): Andrew Milich Skill level: Beginner Track: Developer Infrastructure Keywords: Privacy Follow us: https://twitter.com/efdevcon, https://twitter.com/ethereum Learn more about devcon: https://www.devcon.org/ Learn more about ethereum: https://ethereum.org/ Devcon is the Ethereum conference for developers, researchers, thinkers, and makers. Devcon 6 was held in Bogotá, Colombia on Oct 11 - 14, 2022. Devcon is organized and presented by the Ethereum Foundation, with the support of our sponsors. To find out more, please visit https://ethereum.foundation/
Transcript
foreign [Music] thank you for starting the morning with us I'm here to introduce Andrew millik he's the co-founder and CEO of skiff which is an end-to-end encrypted privacy first wallet native communication and collaboration platform Andrew previously worked on spacecraft at eight SpaceX operating systems and spend time working all over Asia and Eastern Europe before that Andrew graduated as the Henry Ford the second scholar from Stanford welcome Ender thank you so much and hi everyone nice to meet you I've got a great group so yeah we're going to start by talking about basically the stack of how you'd build consumer applications in web3 and so what does that mean not just for applications in defy and finance and trading and exchanges but how can we actually build applications that we use every single day and ideally every single hour so you wake up you check your email you check your messages how can we rebuild the stack of the way consumers live and work on the internet to be more private and use our own so we'll start with just some of the attributes of what we look for in our application and also in all applications in this sector we'll start with privacy first and this actually for us at skiff is probably the most important fundamental layer of how we build things so what that means is all of your data is owned by you and it's private to you so no one else not some technology provider or platform will have access to it and so it's really only something that you should have access to which is just also a lot more intuitive for the way we use these really sensitive applications whether it's file storage or messaging or communication all the the things that we store on those products should really only be known to us and that's not an expectation that people certainly have today beyond that and we'll talk more about this later we think it should be decentralized and what that means isn't always that you know compute is taking place all across the world on chain or um always on a decentralized network but it should be architected in a way where your data and your compute isn't always entrusted to a platform and that translates into the data structures that you might use into the way authentication and identity might work and also into so much more from an ideological side of how might your data be de-platformed if you're removed from it how would you think about censorship resistance how do you think about access to it that's always permanent and always accessible and then also how would you think about just incorporating privacy into every single piece of your data storage and identity finally this one's a little interesting we think that application should be interoperable so when you're no longer asking an oauth application like Google for your identity we want you to be able to use that information in other parts of the web so whether it's logging into another product uh storing your data elsewhere or building really cool API and programmatic Integrations to all the files and things that you create and lastly we'll just say this very briefly we think it should be open source which is something we've committed to at skiff but also I think something that uh in the entire community of just ethereum and the crypto ecosystem is really important to make sure people trust what you can do and also can replicate it so we'll start with privacy first with a pretty intuitive saying which is if you own the keys you also own the data um and so basically everything on the plot the product should be n10 encrypted from the ground up so you're sending a message keep that message private only to you and the recipient if you're uploading a file or piece of information make sure that's also private only to you we've basically just seen countless examples in the last two years with people storing things on the cloud and being de-platformed targeted for the things that they store in a cloud provider or just not really able to understand and Trust where their data is being used is it being dropped into some massive machine learning model is it being used in some massive search indexing algorithm that's also just used across 500 million other users your data should be private to you and n10 encrypted I skipped over this but we also want to make sure there's no personally identifying information inside these products this is slightly controversial uh depending on the application but uh in the encrypted messaging space and antenna encrypted Communications it's really kind of this Ground Zero expectation that people have where you want to be able to use a messaging product you want to be able to use a communication product without giving out a phone number or a real name Etc and so many places in the world now make it harder and harder to do that whether you need to submit an ID to buy a SIM card or you need to go through an internet provider or an email provider and provide another address or some sort of accountability chain so that first one is also really important to us and finally a lot of this these bullet points actually rest on the idea of non-custodial wallets or non-custodial public keys where if you're doing n10 encryption you kind of have to own your own key pair and so that poses a bunch of interesting consumer product challenges that we'll get to shortly so on that next point of decentralized we talked a bit about how decentralized can lead to censorship resistance where there isn't a single kind of point of de-platforming where you can get kicked out of your identity or kicked out of your product and also with n10 encryption it's really unclear even who is using that data or how it's going to be processed Beyond just the things that you do with it this also translates into client-side data storage data structures sharing search collaboration and more so once you've gone down the path of n10 encryption any product that you build will not have access to user data and what that means is you've kind of set up an entire sequence of challenges and Hoops that you have to jump through whether it's rebuilding how search works you know searching on someone's device or rebuilding how you share that data with other people so if I want to share a file or a document with another collaborator how can you know I as a user do that but the platform never be able to do something like that finally one super important point is also how you trust the platform in the product as well and so that comes from how you might actually look up other users public keys and we'll get to this later but this is one of the biggest you know age-old questions in communication how do I send a secure email to someone how do I look up someone's public key if I'm using you know signal or a telegram secret chat or pgp email back in the 90s and then on that interoperable point a lot of similar things about basically giving people ownership of their identity through self-custody of their keys or wallets and then also just using a much more local first on device model where data can still be synced or synchronized across the devices and things that you use but because it's n10 encrypted a lot of that actual computing power and Computing Authority is no longer with the technology provider uh and then we'll cover some of that last point about command line access or programmatic access for your content so I guess let's get into some of the actual technical parts of the stack uh how is actually intent encryption communication been done in the past we'll start with pgp I don't know Has anyone used pgp or uses it regularly okay so a little bit so pgp is uh I think a little over 30 years old now uh it was invented or published in the 1990s I think 91 and unfortunately it's become pretty clunky pretty clunky very complex and pretty inefficient where there were proprietary formats owned by corporations open source formats owned by you know open source standards and now just other basically open source Publications compliance standards Etc that try and take this age-old 30 year old standard and updated for modern cryptography and secretly it seems like we have a few pgp users here but I'm just going to say that almost no one actually uses it it's estimated that literally 50 000 people worldwide still maintain pgp key Pairs and if we look at the other option for n10 encrypted private communication we're literally looking at many three four orders of magnitude of different scale and so you can understand why maintaining your own pgp care or key pair is probably a thing of the past so if we look at signal and telegram as examples where signal is default antenna encrypted using the signal protocol and telegram is n10 encrypted using secret chats we get so much more privacy built in right out of the box so the protocols handle all the stuff around key exchange key downloading and actual encryption of messages and then that leads to you know 700 million monthly active users on Telegram and over 100 million on Signal finally one piece of this that you know is somewhat of an advantage but also can bite you in the back in the end is a complex story around key ownership sign up and metadata where if you look at a product like telegram they're often criticized for not being fully open source even if some of the protocol is and Signal often is criticized for requiring a phone number on sign up which for some of us may not matter because we'll you know happily share a phone number with friends but for others it can really defeat the purpose of a privacy first messaging product now we'll look at one last piece of the current uh authentication framework so the last is oauth which I think is one of the most painful uh forms of doing authentication today because it's basically putting your identity in the hands of one single server and provider and so whether it's you know your Gmail account or another product you've basically made that to you know become your identity around the web Without Really knowing that you really own it and so the way oauth works is just for a quick overview you know you'll plug oauth into your app in five minutes you know developers have made that so easy you can query for a scoped token so ask for my birthday or my favorite color or my email address and get back credentials that can be refreshed possibly indefinitely for access to an application so a lot of these standards have developed as we you know the identity story gets more and more complicated around the web as centralized providers store more information about us and also just keep enlarging these scopes of data that you could access now we'll just flip the Paradigm completely on its head we at skip think wallets are just a natural successor to this problem across encryption across identity and across data ownership so we've actually seen wallets start to be used as the basis for generating end-to-encrypted key Pairs and so if you're familiar with the method eth get encryption public key this is actually an Innovative thing published by the metamask community and then later adopted into Brave wallet where you'll turn an ethereum public key or ethereum key pair into a curve 25519 encryption key pair which can be used to just encrypt and decrypt data with your metamask or Brave wallet uh there's a bit of complication around that as some of the cryptography is ironed out but it's this much more simple and intuitive way of going from a key that you own to an entire framework for end-10 encryption instead of access grants we'll where we'll ask Google or a provider for more data all of this will be super transparent to users where you sign a token giving access or authenticating exactly what you want or exactly who you are and then finally on the distribute distributed public key directory I think no one here wants to put up one of those you know HTML only personal pages with your pgp key and then just expect people to go to that if they want to communicate securely with you with wallets and things like naming Services we get a much simpler way of going from a human readable name like skip.eth to a public key and we have some people from the dm3 team here who are working on that exact problem uh we'll talk about this more later but it does introduce some problems on the consumer side with recovery and basically account reset as we all know and using a wallet so just to recap what's this new model for authentication we'll start with a human readable name like you know an email address or even simpler we'll take that and transform it to a wallet address which is done using a transparent on-chain lookup and then finally we'll recover a public key from that and so in certain cases we'll get back an ethereum key pair or in others like that uh kind of experimental method I talked about we could actually figure out a way to get a really well suited encryption key pair to send data to people end-to-end encrypted so now we'll go we'll kind of completely erase the pgp stack We'll erase oauth and we'll go from this you know human readable name all the way to n10 encryption much easier than signal much easier than Telegram and so much easier than pgp which is why people don't use it um so then we'll just cover some about storage and interoperability a little more on the technical side so this is a point that I've made a lot but I think is pretty intuitive as well if we're moving to a world where decentralized storage actually works for products we also need n10 encryption if you're storing data on a decentralized network you wouldn't want to store it all in plain text you know I write a note I write my PhD thesis I don't always want every single draft of that to just be stored you know sharded around the internet in plain text so instead I want that to be encrypted and I don't want that to be encrypted with some random person's key I want it to be encrypted with my key and that's exactly what n10 encryption means so to get basically this value alignment across end-to-end encryption and decentralized storage wallets are an excellent solution for that and then once you've actually published things to a decentralized network you can use that Network to query for it maintain a list of identifiers and have permanent access to that outside of any sort of platform which gets back to that importance of censorship resistance then we'll also just talk about the data structures let's say you're now using an n10 encrypted product that has no access to the things that you're writing you're typing your notes your documents all of a sudden you can't use a single server like the Google model or you know the centralized model of collaborating you have to use a new set of data structures and so we'll cover this briefly because it's probably a little bit of a tangent but there are actually really good data structures that are now coming into modern production use like crdts which are conflict-free replicated data types that actually allow for composable operations to be done on these data structures from around the world so I increment some number and someone else across the world decrements it you can see how that operation is composable and so even if we there's some latency or someone gets disconnected we can arrive at a really consensus based version of a final product without having a server the last point about interoperability is that it makes account transfer sales and auctions so much simpler so when an account or identity is transferred on chain we'll just do that same lookup and the new owner gets access to that username or will just automatically have access to that's gift.heath it'll also mean that users can choose their own history and path around things like 2fa you know account uh signatures and login and all that sort of stuff so if you want to use a multi-sig wallet for skip.eth or you want to set some sort of 2fa mechanism or use a hardware wallet you'll get to choose your own security posture and so that has a lot of Pros for more advanced users it means that people can choose their own way of securing their their private keys but it also means that platforms no longer have to deal with some of that risk of accidentally de-platforming people having 2fa and complicated reset mechanisms and you can make sure that the right identity is going to the right person it does however introduce complications around account reset so we'll just be transparent about that you know how difficult it is to remember a seed phrase maybe you wrote it down or put it in a safety deposit box or you split up pieces and gave them to your friend but that makes building consumer apps a little more challenging too like if I want to reset my email address or my messaging app it's a little weird to ask my friend to click a button or three of them to click a button and give me their you know secret out of a few different secret shares or to use a multi-sig wallet to log into a single collaborative product so it gives users a lot more freedom and empowerment over how they can use these products and lets you choose your own security Journey but it also means that there's more complexity around account reset identity and all those areas that frankly a lot of the regular consumers will get to and so that's something we spend a lot of time on at skip how can you make products really simple really easy to use and really easy to sign up and so once you get to users who you know don't want to remember a seed phrase or write it down on their desk you actually get people who you know have access to all these amazing benefits of end-to-end encryption and you know easy to use collaboration but then if they lose their seed phrase it's harder to reset your account so to recap on the stack we talked first about the auth layer where wallets basically enable this entirely new user-owned flow for authenticating and logging into products they also give us a much simpler mechanism for Distributing public keys so don't run your own personal site with a pgp key pair run your wallet and just basically add that data on chain so we can go from your human readable name to your wallet address to a public key to end 10 encryption from there the storage layer of using decentralization and n10 encryption give us so much more flexibility you can basically store data in more places or in a decentralized network if that data is encrypted with your key pair it also means that data is portable so you want to access it via program or via some sort of command line tool and change it or edit it or download it you can do that all from the decentralized network then finally on the app layer there's still a lot of progress that has to be made so this is basically a whole new paradigm for building a product like Gmail or Dropbox or drive or OneDrive I've tested you know or our team has tested every single email product out there every single storage product out there and it's radically different to build one that's n10 encrypted from the ground up and works with people's wallets so it gives us a lot of benefits of basically this you know natural path from Identity to key pair but it also means that we have to rebuild a new stack of consumer apps that do this all behind the scenes you know simply naturally and also really performantly so that lookup process gets complicated um so I think from there yeah I just wanted to add a couple notes about basically how we think this benefits the entire community and ecosystem and then we'll do questions so my background is I've been a software Engineers my whole life since I was probably five or six years old although I was not a professional engineer at that point and now actually doing this for real you can see that this model of Building Products is just so much more intuitive and better for people and their identity so if you have a you know a wallet or a keeper that you really trust and you want to keep track of you get to choose your own security mechanisms and safety mechanisms for owning that private key if you want to communicate with people around the girl the world with end-to-end encryption you can now get that an entirely new kind of more user-owned stack of products I've been a big fan and so is our team of decentralized storage and n10 encryption is one of the biggest enablers for actually building consumer apps on top of it so there's still so much work to be done on the product side but we think that basically going from you know this distributed consensus around public keys to end time encryption to a lot more flexibility on storage and interoperability it's just a much more intuitive better and simpler future that the end of the day is giving people access to what we see as a fundamental right which is private communication private writing private collaboration and owning your own key pairs so I think we've got five six minutes for questions thank you all for coming I know it's uh early go ahead ah so this is a great question the question was what are the nuances of going from uh I think it's just basically a wallet address to a actual public key that you might use to encrypt data so the nuances are like a wallet address is derived from a public key so it might be a hash Republic Key or you know a hash and a truncation of a public key and that's how you get the you know the hex 0x whatever you can't use that hex to encrypt data it's just basically the hash Republic Key and not a public key so that gives us I'll just go back to the the diagram so because we can't actually do that there's now two options to go to a public key we can use for encryption one is we generate a new key pair that's derived from your wallet address so derived from your wallet private key for encryption so you can use whatever elliptic curve you want so one that's really well suited for that and generate a new key pair or in the ethereum context you could use an ethereum public key so a curve scp-256k public key which is not really quite as well suited for encryption it's a little slower and generally not preferred over you know like a curve 25519 public key but yeah I think there's still a lot of lack of consensus on how to go from a wallet address to a public key or how to use you know do encryption and decryption via wallets is that uh the data can be stored in a decentralized way into showed ipfs how is this real estate in practice on crdts when that user presses the keys that the new ipfs hash every time or how does it work yeah this is a good question so right now basically the way way our products work is when a user presses a key it's applied locally to your editor State your editor state is some data structure that's like editors are actually super complicated you know we should all go to a conference on text editing but basically editors store some array of values like headers body text Etc so that gets mapped to a crdt state which is just a data structure which basically like a set of operations on an empty State and so that operation you know I typed a key at position 500 is then sent or it's n10 encrypted sent across the network to other people who are collaborating and they also apply that operation and so you do both do that composibly and end up at a final state from there every so often and there's another I guess like a few little kinks to iron out here from there your document is intent encrypted so encrypted with a key that you have access to in your collaborators do but no one else does and then from there it can be uploaded to ipfs and so there's a few nuances of not everything in real time on our products is uploaded to ipfs but things that are immutable or static or published can be so so that's how that's done today but um yeah the whole decentralized storage kind of network choosing is another whole area go ahead sorry can I just ask then are your servers they're providing the ipfs services that's not decentralized as of yet do you have any plans around that or yeah so I don't think we I've been a big fan of ipfs for like five years and what you know tried running my own notes all that I don't think it's totally feasible for everyone to be running their own kind of nodes in a decentralized network so they're a really great ipfs gateways you know for upload and even cloudflare runs a really fast kind of caching layer on top of the download part of ipfs so I think basically yes there's some you know antenna encryption which is done client-side then it gets passed through some sort of Gateway which is generally centralized and then it gets put on a network and like the user at the end of the day can get access to those identifiers so at the end of the day you still get the benefit of you know your data's on 10 encrypted it's put on a network you can get access to the identifier in the key but it's not you know every single part of that process isn't uh totally distributed uh well if any last quick things either come grab me thank you all for coming and yeah I guess we had that whole uh Power scare so someone you know did some sort of search [Applause]
Automatic transcript — names and jargon may be misspelled.