 I'm Nicola Krstic from Diplo Foundation. I'm CEO at that company and I'm responsible for all software development. Don't trust Verify. Today's theme is about digital certificates stored into a blockchain. First of all, I have to explain why we developed that. Our company has a lot of activities. First of all, capacity development supports the country's development currently. We follow many conferences and we have very good and important sites for tracking events around the world. Diplomatic events, first of all. We track mostly diplomatic activities and research publications all are related to link between diplomacy and internet. Internet governance is one of the most important theme for us and of course we have courses. Our courses mainly covers, again, diplomats. We have our students from around the world. It is online learning and many ambassadors attend our courses at different levels. One of the most important level is postgraduate diploma course. Because after our course, as any other educational institution, we have to issue certificates for our students and we did many years in Thunder Bay. We printed the certificates and sent to our students. It is standard analog way and we are aware of that. We are in the middle of transition from analog to digital and for example music transferred to digital. Many high-five purists said that it is impossible to achieve quality but it is done now. Photography also, photography purists said that it is impossible to achieve the resolution of analog film. It is done now. Maybe we say that standard certificate printed by an institution is obsolete. Maybe obsolete. I will try to display here our solution for that and maybe it is our future solution to cover all our courses. At this moment we have a standard way to cover our certificates and of course this completely new way to store certificates inside Bitcoin blockchain. Why to go? User has control of its own certificates. It is so easy to verify because when you apply for a job, you can simply give your URL to our verification site and that company will be able to easy check your certificate. Certificate could last after disappearing of that company. Sometimes some institutions simple vanished and if you try to call something by phone to check certificate, it is impossible. It is probably the way to store that certificate forever. At the end of course blockchain is a very safe way to store transactions. The certificate stored inside Bitcoin blockchain is very safe. First of all, just to explain current situation and we covered most of our courses with this solution. It is standard PDF. We could say it is semi-digital solution. We create templates, logged users could access their certificates, print that certificates and access certificates anywhere by any devices. Of course our certificates could be emailed to all students around the world. It is okay solution. It works for many years. But we talk about standard PDF. It is so easy to hack and change PDF. You know that. It is so easy to print fake copy of that certificate if you have example of our PDF certificate. Also it is very slow process of education of employer company to check that certificate with our company. Phone call, email, etc. etc. I worked as training manager at one education company many years ago and we had problem with that already because I noticed that our certificates sometimes some people tried to copy. After that I tried to protect as much as possible. It was a long time ago and it was not digital era and I tried with hologram. I had to ask at that time authority to allow that for us. You will lack also use embossed certificate. But at that time it was good enough. Now with digital it is so easy to fake analog product. So it is completely logical to move on and go forward with digital solution. MIT lab offered and proposed one solution. How to do that and made proof of concept. How to try to issue certificates and use that every day. First of all we have to ask our students to send public key to us. We create certificate, store into blockchain, send back to user student URL and after that that student will be able to prove they certificate to any one company around the world. It is a role procedure how to do that. Let me explain. This is how we ask. Actually we ask our students to use that site for example and create Bitcoin blockchain public key and keep private key for website. It is how to say it is moral solution. Of course it is possible to create completely automatic solution and create all public Bitcoin addresses for our students. But it is not moral and it is not okay. We have to ask our students do we want digital certificate because that digital certificate will be public at our site and all students of course say yes. After that we ask for public key to generate public key and set in the profile. Next steps are necessary to do that. We need of course certificate schema. It is standard. How to store certificate data in the JSON file. We are talking about standard JSON file rolled by schema and that JSON file of course we have to use in a little bit different way later when we want to store cache of that JSON file. I will explain that later. We have to issue unassigned certificates. We first create template and after that make all unassigned certificates for whole class of students. It is how to say usually we do not issue just one certificate. It is not logical. It costs about five dollars for example. It is not main problem but it is logical to use group of students usually class one class of students to issue whole certificates at one branch. When we issue certificate we create hash of JSON certificate store and store it into blockchain. At the end of course we need certificates viewer actually our verification site and with that site and URL the student will be able to prove that certificate. Different data are necessary to enter during certification process. Of course you issue a logo signature name of organization director etc. etc. description. It is all important during certification process and for example it is sample of certificate templates. It is the first phase when we start to create one bunch of certificates. Sorry. You can recognize elements, email, name etc. etc. I will explain later more about that fields. Hader. Of course that Hader is the most important. Image file is converted base 64 and stored inside JSON because that JSON holds all necessary data to display that certificates at site image. All images are inside JSON. So you cannot fake that JSON file. It is completely impossible because I created whole process of certification and verification and back. It is so complex procedure and it is completely impossible to fake that JSON file. We can give that JSON file to student. We can give that JSON file to you and ask you to try to fake that JSON file and I'm pretty sure it is impossible. It is more friendly way to see that certificate. So I'm talking about unassigned certificate at this moment. That certificate holds all necessary data about organization about students but it is not yet signed into blockchain. After signing we will add that signature at the bottom of this JSON file. This is footer of unassigned certificate still no signature. It is simple presentation. So next phase and very important phase is how to store that certificate. Actually hash of all certificates inside blockchain, bitcoin blockchain. As you know you cannot store too much data inside bitcoin blockchain. It is not logical operation of course but there is one standard way of return field and you can store up to 80 characters. At one moment it was 40, now it is 80 again. So actually we do not make transaction with money. How many of you use bitcoin blockchain? Okay you know what I'm talking about I suppose. So actually at that moment when we are trying to store data string of character hash we do not make real transaction. No target address to send money. It is null transactions with zero value. I'll display that later with one sample. So we store hash of all certificates using Merkle tree. Merkle tree holds all certificates and I can display that here. You can see here one, two, three, etc. certificate. We first of all converts that certificates into a JSON link data format. We normalize that JSON because it is necessary for process of verification later. We have to compare, store the JSON at our computer with hash of that JSON and if we do not normalize that JSON you could expect problems. So we are talking about hash of normalized JSON files and standard Merkle tree, one hash, the other hash, one plus two, hash again, hash again, plus plus and we at the end has Merkle root hash. So if we follow this path, this proof path, how to come from target hash to Merkle root. It is very important for verification process later because we have to store inside signature this known, this hash, Merkle root hash and whole path from target hash to Merkle root. During process of verification we check that validity of that path and Merkle root and target. Because that I said it is almost bullet proof solution because it is so, so hard to fake anything inside of that process for now. So issuing certificates sign, we have to create signature. Signature has next nodes. We have Merkle target hash, this hash of our JSON file. We have Merkle root, Merkle root, OK and source ID. It is ID of blockchain transaction stored inside that type and we have proof. Proof usually actually is entered with right, left, left, right, etc. It talks about that how to achieve from target to root, how to achieve root from target. It is real, real path. So transactions costs about 60,000 Satoshi, about five dollars at this moment I think and covers up to 2,000 certificates. We never issued that number. Of course I think maximum was 100. So that is it about signing. When we sign every JSON file we enter inside that JSON file as last node that signature. And you can see now here for example complete path proof is here, unhors, the source ID is here, target hash and of course Merkle root. When you have JSON file after that process you can hold for your archive and verify at any other site with blockchain certification process Bitcoin. Although we have at our site if you have certificate JSON file you can verify that file at our site verification site. Because it is standard procedure and we had to observe the rules and of that procedure. It is not complete covered with documentation and standard. You have a little bit use reverse engineering for example to solve that. It is necessary for me and I spent a lot of time to match completely exact same process proposed by MIT. Not all at documentation, definitely. JSON LD, JSON linked data procedure is most important for that. It is very complex process to normalize JSON and it is very important. Okay a little bit more friendly, more friendly. Displaying of that you can see left, right, proof is here and complete path. No secrets here. It is public document like transaction. Transaction also is public. First of all let me explain briefly and very quickly standard MIT procedure was something like this. It is Python based solution. I'm using Python but it is not my primary programming tool. There are Python programmers here? No. I don't think bad about Python of course. But whole procedure and all tools are written in Python and you'll see you have to use command line. Okay, no problem for me. You can set configuration files again from command line. Okay, no problem for me. You have to use Docker because inside Docker you have issuer. No problem for me. But definitely it is complex process. At the end I end up with screen like this one and my director asked me can you instruct our course certificate manager to use that? Come on. It is impossible. It is not user friendly solution. It is proof of concept. Highly skilled programmer can use that. Highly skilled administrator with Python knowledge can use that. But certificate manager, it is administration of our company. Come on. So I started to think about better solution of course and because the only one person at company was me to issue certificate. It is not my responsibility. I'm CIO. I'm working with software and it is not my responsibility. It is not moral to wait on me and to issue certificate for students. I can do that. But it is not okay. Definitely. That is a dedicated person for that at company. So I try to make something better. Because we use at our company mostly Drupal. Everything is on Drupal main sites, et cetera. I try to make better solution, user friendly solution because all people in company around the world use our sites on Drupal. It is very friendly and viable for that people. Because I decided to use Drupal for that solution. So I ended up with next. We had to talk about security here, of course. Because MIT said, okay, your machine with issuer, with docker should be covered with special security, locked room, special safe, et cetera. It is impossible to work in our way with that concept. Because that I ended up with next solution. We have two learning management system at this moment. Main, very robust and large system. And because I put issuer site, Drupal site, behind VPN. Good enough. You cannot access outside VPN. If you have VPN access, you can see that side simple as that. And I think it is good security for that side. Also, you cannot issue certificate if you do not put USB stick with our private, private company, private Bitcoin key into that machine physically. So that machine is inside our office. We have a lot of servers in our office. One of that machines is that machine. And if that could certificate manager want to issue to start certification process, he must call me or somebody in the office to put USB stick. So we have at this moment that kind of security. We can say, just let me explain, if we want to make transaction at Bitcoin blockchain, we have to put in that transaction our private key. Because we have to pay for that transaction and Bitcoin will take money from our account. Without private key, it is impossible to issue certificates. Simple. Because that it is usually removed from this site. So how it works? It is behind VPN. But that site asks our LMS for new courses and students. Standard export. It is XML from here, importer here. Probably you use that every day at your application. It works like a charm at Drupal. And then we have here new class, new course imported. Course certificate manager receives notification. Simple as that. Then course certificate manager receives notification. He could log in at your site to finish process of certification. And I try to make that as simple as possible. To avoid any question, to avoid any problem, to avoid anything about, it doesn't work. I have problem. Please tell me again how to do that, etc. There is a simple list with steps. You can add it. Course to add image, to add signature, to add director name, etc. I can just be here. For example, all data is here. But you only, you have to follow next procedure. You can issue an assigned certificate first here, click here. You got this finished. After that, you can issue and sign certificate. And at the end, everything is finished. The last step is to edit and publish that course. Simple as that. After that, after that verification site can pull data from issuer site. Also, verification site by Drupal Chrome drop asks periodically for new courses and students. Simple. Whole process is very simple. And reliable. So, and after that, we can go to our verification site. Standard Drupal site with the list of courses, class course with students. And simply you need to click that button. And we have four levels of verification. First of all, we check certificate hash does that certificate. Hash match, hash stored inside JSON file itself. First of all, we remove signature node. You remember we added signature at the bottom of JSON file. JSON file is stored at our machine. It is a standard way of verification. JSON file is at our machine. During verification process, we remove signature node, repeat complete hashing procedure with all elements, and compare hash. If it is okay, it is one of checking. The next one is metlapath. Of course, we have to check does metlapath match with path entered inside our JSON file. Actually, can we reach a root, metler root from target using that path? Simple. Somebody could try to change that path inside JSON file, for example. So, it is impossible to hack that method definitely. And of course, we check metler root stored inside JSON file with metler root stored at Bitcoin blockchain transaction. So, we have metler root stored inside signature, and metler root is the only one hash stored at Bitcoin blockchain. And metler root has all necessary data, all about all our certificates in that back. Second step is checking certificate for expiration date. For some reason, it could be a problem with date, of course. Somebody tried to change date, or we could issue certificate with expiration date, simple as that. For example, Microsoft like that do issue certificates for your Microsoft professional, something like that. And it is valid for one or two years. I had in my history that exams, and after a few years, it was completely out of date. So, expiration date is that. Simple. We have revocation list. If any reason to revoke issued certificate. Somebody said or we could recognize some of the students treated during exam, but we already issued certificate. We should revoke that certificate from the list. We have simple JSON list to put ID of the JSON file and say it is not valid certificate anymore. And of course, the last step is to verify the institution. We check our key. We check address and compare date of transactions and how old is our public key, creation of our public key. It is one of steps to our verification process. It is sample of code, very straight procedure, one level to another one to check. Let me explain a little bit about Bitcoin blockchain record transaction. It is possible to check that manually by your browser. No secrecy in that process. It is nothing, no black box for that. You can use source ID here. Actually, it is source ID. It is ID of that transaction. It is stored inside JSON file. And you can use that URL, row text, blockchain info, row text and that source ID. And you'll get complete info about that transaction. You can see it is our public key of our company. And it is first node usually who pays in Bitcoin blockchain transactions. But the other one node, the second one with index one has zero value, no money. No money inside that, no target address. Instead of that, we put here hash. Merkle root hash is here. First four characters we have to remove. It is how to say sign to miners about that transaction. It is stored, the certificate is stored inside that node. Implementation. We had a large diplomatic conference at Malta two years ago celebrating 15 years of company. And we issued for all visitors, very important visitors because it is diplomats around the world, ambassadors, prime ministers, presidents of country, etc. We have issued certificates for that conference. We created QR code and printed, of course, that certificate with QR code. And during conference it was so easy for diplomats to check validity of that certificate by this QR code and our verification site. Why? It is a good opportunity. It was conferencing the future of diplomacy. It is a good opportunity to promote digital certification process inside that society diplomats. After that conference at Ministry of Foreign Affairs at Malta, I was questioned about one hour about that process. Diplomats are usually very suspicious about new technology. They ask me everything. And one question, of course, was what about if Bitcoin blockchain disappeared? It is hard to say nothing except, okay, probably internet also doesn't exist. Maybe electricity doesn't exist. I said that. I answered that because, and that diplomat said, okay, probably you're right. So it was positive reaction. All in all, we got very positive reaction from diplomats about digital certification process. So it looks like it is secure enough. It is good for employee. It is good for employer. You can bring the URL or your code everywhere and simple prove your certificate. It is simple. Schema about that. And of course, somebody has to take care about beauty and somebody has to take care about security and servers. I have to say thanks to Yalana College web designer and Carmen Romano, the researcher from Malta. We have four offices around the world. One of offices is at Malta. One Geneva, Washington, Belgrade. That's it. Do you have any question? Please do not hesitate to ask me. Yes, please. I have a question about the transaction that we're signing. It appears to me that you are the custodian of the private key, right? That is signing the potential transactions. Yes. Wouldn't it make more sense if we empower, for example, the entity that wants to issue a certificate to actually sign that transaction and be in control of their private key? Private key of student? No. There's an entity that wants to sign some certificates, right? Yes. For a certain course, for example. It appears to me that you are the one that are signing that. Company, private key. Company, private key. Yes. This is the company. Company, private key. Not mine. No, no, no, no, no. This company, private key. At this moment, I am in the office. Okay. They can call me to put that USB. But it is not my private key. It is company, private key. And we signed that certificates with company public and private key. Yes. But the company is not the entity, right? Yes. I see. Yes, yes, yes. Because this looks like centralization, which is... Yes, but how to solve in other way? Maybe it is a good solution for us at this moment, definitely. But future, I'm talking about because I'm trying to spread idea about that solution. And a little bit, maybe community has better idea, maybe a new idea about how to solve that problem, centralization, not centralization, et cetera. I'm aware of that. Of course, control from just one location is not good, definitely. But how to solve that? I don't know. Somebody has to be responsible to issue certificate and to prove that process. How to solve that? It is one possible way at this moment. And it works. It works. Any other question? Yes, please. Yeah. How do you ensure the security of your company's private key? And don't you fear that you will lose? It is inside office, behind locked door, behind cameras, and in the safe. It is enough for us at this moment. Why? Probably nobody knows about that. What is that? Simple small USB key. It could be anywhere in the office, actually. And we have numbers of USB sticks inside office at one, at this moment, for example. Any other procedure will be too complex for us, I think, to store that in bank or something like that. Do you have any suggestion about that? We have a secured office that paid secure, how to say, security organization. In case of the problem, they came in two or three minutes in front of our door. It is good enough for us, believe me. It happens. Just one for that company to attend during evening our office to check. But it was our colleague. They forgot to enter code. Simple as that. And didn't answer their call from that company. But they are very fast. It is good enough for us at this moment. But do you keep like copies of the data, starting that USB or is it the only one copy? We have identical copies at Malta. And this also starts on USB, right? Yes, yes. Because I know that USB is after a couple of years. Yes, yes. At Malta, our administrator is located at Malta and he takes care about all backups, all servers, also about pilot keys, et cetera. And I think it is everything in day control and covered completely. Well, it's back continuing on that point. Have you considered multi-sig for multiple signatures? Yes, it is possible, probably, yes. But at this moment, we use that for VIP courses only. For example, for courses on C2 at Geneva, at New York, Washington, et cetera. We still do not use that for all our courses. So, frequency of that is, we'll see. But good suggestion, definitely. Yes, yes, yes. Thanks, thanks. And redundancy. Yes, yes, yes. Thank you. It could be improved, of course. Any other? Yes. Are you considering using a segregated witness or do you think that it has no use case for it? Not yet, but again, it is how to say, better version. And we want to display that to our students, to you, et cetera. We could improve that process. Also, I think other companies around the world think about that and try to make something useful in that area. And at one moment, we'll have good solution. It is just one of solutions, I think. But it is user-friendly solution. I think probably the first one, user-friendly. All others are at Python. I don't hate Python, please. Everything is okay. I use Python also. But I cannot use Flask Python server for web. It is nightmare for me. Apache is a real solution with Rupa. You agree with me? Thank you very much.