ZK Workshop #1 - Introducción
ZK Workshop — Ethereum Uruguay · 1:46:40
An introduction to zero-knowledge proofs and the mathematical tools needed to understand how they work.
Speakers
Topics
From ZK Workshop — Ethereum Uruguay, hosted by Ethereum Uruguay.
Transcript
comp esto muy bien Se ve bien Ahí la presentación bueno anes de puedo ver la llamada o sea solo puedo ver lo que están viendo en la pantalla acá eh Así que si levantan la mano lo que fuera no tengan miedo en en hablar igual escucho el ruidito y comento a ver si tienen preguntas eh Pero eso no no voy a cortar para ir a la llamada porque
no no puedo eh Nada un detalle técnico bueno Cómo están Todo bien ya con están acá ya hablamos un poquito eh Para los que están ahí en la llamada me presento mi nombre es Franco mangone soy desarrollador blockchain hace ya unos años este ahora igual tengo una una slide para esto pero nada y bueno surgió la idea de hacer este este curso de introducción a zge proof que es una tecnología interesante moderna y que permite hacer unas cuantas cosas así que bueno Es la primera vez que que hacemos esto eh No sabemos cómo va a salir Esperamos que bien pero bueno si tienen feedback comentarios pregunten cosas interactúen
así también aprendemos y lo hacemos mejor Pero bueno vamos vamos a arrancar con con esta primera iteración e nada como les comentaba Mi nombre es Franco soy blockchain de este nada me gusta la criptografía yeng hay un par de Fun facts ahí se ríen por acá Este sí está me gusta javascript lo la gente de hoy está medio como no sé como que es una cosa fea está de más hac cualquier cosa eh conocía a Wood como acá seguramente Francisco también es un tipo bastante interesante todavía me falta conocer a vitali pero algún día eh Y bueno me gusta la pasta frera si alguien
tiene algo que decir lo discutimos después y bueno me pueden buscar en las redes como CX Franco mangone en Twitter linkedin y también escribo algunos artículos en medium por si les interesa sobre criptografía blockchain y otras cosas que vendrán bien bueno dicho esto les parece arrancamos ya y me parece como que podríamos arrancar sando un poco las expectativas no de todo esto momento Esto va a ser un temita que si no noend que ir cortando
No pasa nada bueno los que se unieron recién Hola hemos arrancado con algunas cositas pero todavía no no empezamos con el curso e Bueno retomo lo que me gustaría hacer es cetear un poquito las expectativas de qué se trata este workshop vamos a hablar de conceptos generales de esto que es proof primero pero después vamos a entrar un poquito más en en detalle propuestas mása esto Esto va a ser un problema ahí está Vamos a entrar más en detalle con algunas cosas que son fundamentos matemáticos para la teoría que está por detrás de esto la intención es que se vayan con una idea de cómo cómo funcionan técnicas modernas pero
yendo bien al hueso no qué es lo que se hace cómo funcionan de verdad no tanto como el panorama más por arriba s y también me gustaría dejarle algunas propuestas prácticas que no no llevan nota no llevan ninguna evaluación pero como una especie de challenge por si quieren ir un pasito más allá pueden tomar estas propuestas y ponerse en sus casas a jugar y programar eh y decir que bueno Esto no es un curso que vaya a a la profundidad más profunda del tema o sea Hay muchísimo más por aprender eh creo que eso queda un poco a criterio de ustedes o podemos conversar un poquito más y bueno La idea es esa que se vayan con una idea general pero no tan básica de lo que es este mundo de
la sir Plus sí eh No pregunté Pero se escucha bien en en la llamada Sí sí sí todo perfecto muy bien bueno Vamos allá entonces empecemos Qué es una Zero knowledge proof alguien quiere no sé contribuir con alguna idea o qué saben al respecto silencio total eh en la llamada por ahí alguno sí e a ver me escucha sí s lo que entiendo por ser o no sc es una manera
de verificar eh una un cómputo o sea algo que se comput y en el proceso el verificador ninguna de las partes puede inferir nada de digamos de lo privado o de o de las partes que que son sensibles en realidad no se puede inferir nada de la prueba solamente verificar que un cómputo se realizó correctamente correcto esa definición es bastante acertada por no decir exacta pero bien o sea creo que haa como varias cosas que que tenemos que definir no O sea para poder entender y llegar a ese nivel tenemos que dar unos pasitos Es correcto lo que dijiste no básicamente está esta idea de bueno si significa no revelar
cierta información no y prueba tiene que ver con esto de bueno verificar un cómputo demostrar algo no entonces Acá hay una definición no es una definición porque es como un extracto que dice yo no está textual pero en el primer paper que menciona la que es de estos señores les dejo el link abajo el link no la referencia abajo está esta idea de que una prueba de algo contiene más información que el solo hecho de que es correct vamos vuelta volvemos para la próxima prometo aceitar un poquito todo esto sí eh de vuelta Cuál es la idea yo puedo
demostrar algo sí y normalmente en en el proceso de prueba yo estoy mostrando mucha más información que solo la correctitud de esa prueba qué quiero decir con esto por ejemplo imagínense que demuestran un teorema matemático algunos se acordarán tal vez de no sé clases de facultad y Bueno en realidad para para demostrar el teorema uso lemas uso cosas no sé qué Y es como porque estoy mostrando muchas más cosas del de solo el del hecho de que esto es igual a esto pónganle no entonces rápido complicado entonces la idea Sería bueno Y si podemos reducir eso a lo mínimo no O sea
yo te puedo mostrar algo pero te doy la mínima información y no te revelo un montón de otras cosas que pueden ser sensibles privadas lo que fuera no Entonces eso es una prueba de conocimiento cero como decían Perdón no no veo los nombres Entonces no no sé quién responde la pregunta si pueden decirme los nombres genial igual soy medio pésimo con los nombre pero ya me los Aprenderé una prueba de conocimiento cero es un método criptográfico que permite demostrar que algo es cierto sin revelar más información de la necesaria y en esto podemos mantener privadas ciertas cosas que son sensibles bien pero es como algo abstracto no O sea qué Qué quiere decir probar algo qué son esas informaciones
no como que tenemos que definir algunas cositas más entonces comentar algunas cosas generales ya para hacernos una idea de cómo cómo hacer esta historia vamos a tener en general dos como dos partes no dos actores que son un probador que quiere demostrar algo y un verificador Sí el verificador dar algo sobre lo que el probador le va a estar proveendo proveyendo demostrando y la idea es que la O sea yo voy a estar demostrando algo sobre cierta información que yo tengo pero no la voy a estar revelando
esa es la Pero cómo hacemos eso no suena raro suena yo te quiero demostrar que tengo 31 años cómo te lo puedo mostrar Sin decirte que tengo 31 años es extraño no Entonces es como este tema así que vamos a empezar con algunas analogías juegos ideas que nos pueden ir acercando como a que esto tiene sentido Sí entonces hay una primera logía no es la palabra es un primer juego para entender una especie de artefacto que es esto se llama la cueva de alibaba si buscan si no les producen internet seguramente esto les va a saltar en algún momento como como
ejercicio mental para entender sí Qué es lo siguiente imagínense que tienen como este esta cueva Así que es como en forma de u está entonces yo entro por un lado y en el medio hay una puerta que bloquea el paso y la salida está del otro lado yo conozco alguna clave secreta que me permite abrir la puerta pero no quiero que me vean poner esa clave no entonces por eso la idea est cueva en U tenemos dos personas Paula y Vicente puse se suele usar p y b nombres con p por probador y verificador Paula cono una clave secreta que le permite abrir la puertaa
bien estaba en tenemos acá estos dos actores no son dos personas Paula vamos a decir que conoce una clave que permite abrir la puerta entonces qué hace entra a la cueva abre la puerta y sale por el otro lado entonces Vicente que está fuera nunca vio qué es lo que pasó no sabe cuál es la clave secreta pero sí sabe que Paula la sabe está bien se entiende el ejercicio mental hay formas de mostrar cosas sin dar ciertas informaciones son clave ya y algo que podríamos hacer que por eso traje un cubo de rubic acá es imagínense que dejamos en la puerta un cubo de rubic desarmado y Paula la clave es saber
armar el cubo entonces va Paula arma el cubo lo deja se abre la puerta pasa sale Qué pasa yo No aprendí nada de eso de Cómo resolver un cubo Solo sé que vos lo sabes armar está bien se entiende es como un ejercicio acá no estoy aprendiendo nada sobre ese proceso de cómo se abre la puerta pero sé que vos lo sabes hacer Está bien hasta acá vamos bien Es es como solo para entrar en calor se vienen cosas más picantes entonces Bueno ahí las flechitas para mostrar el flujo no vamos con un segundo ejercicio que me parece que va a est divertido todos habrán jugado a buscando
en algún momento de sus vidas Sí este es es un también Un ejemplo muy conocido La idea es tienen que encontrar a w capaz que alguno ya lo encontró puede ser pero búsquenlo un segundito está medio complicado ahora si yo les quiero demostrar que yo sé dónde está Wally yo puedo ir y señalarlo bien el tema es que si yo lo señalo les revelo Dónde está entonces no una prueba de conocimiento cero de que yo sé dónde está pero lo puedo recortar puedo recortar y se los doy y ahí ustedes saben que yo sabía dónde
está se lo di pero acá no les revelé Dónde está la otra hoja la tiro Enton hay una diferencia en el mecanismo de prueba que hace que en uno aprendan todo sobre la información de en otro nada lo malo AC Es que destruimos la hoja entonces no es reusable hay otra forma de hacerlo sin romper la hoja pero la idea es la mis bien Es una muy buena pregunta es una buena pregunta es excelente la pregunta podría sera no falta Ah algú tipo de elemento
que congruencia too ahí ya que estamos el otro mecanismo queel decir es agarro el libro no O sea si esto es la página y agarro otro cartón enorme y le hago un agujero entonces pongo abajo del cartón Sí el libro y pongo Wally en el el agujerito y te doy todo Sí ahí ves a wali O sea que yo efectivamente Te estoy marcando dónde está pero no sabes dónde está Porque es muy grande el cartón y después sacas la página y decí Ah era est Okay entonces tu pregunta es muy acertada Porque necesitamos tener algún tipo de mecanismo que nos haga saber si si efectivamente no me estás engañando no Y eso es muy importante está bien muy buena pregunta no la había pensado
eh alguna otra pregunta que se les ocurra en estos ejemplos sencillos la llamada también bueno eh No sean tímidos siento que están medios tímidos la llamada adelante si tienen cosas saben que pueden pueden preguntar ya van a surgir van a surgir una una cosita si te preguntan algo del aula no se escucha bien si puedes repetir pregunta cuando la hacen porque la pude inferir Pero no se escuchó bien la pregunta que dic quieren que repita la pregunta de recién que creo que fue buena y suma sí la pregunta de recién fue Si yo recorto o sea si el mecanismo es
recortar a Wally y y dárselo al verificador cómo yo sé que quien está probando no tenía un recorte guardado y me está dando eso no obviamente podríamos chequear bueno que tuviera los mismos colores que la página que más o menos tuviera sentido Pero la realidad es que podría ser que nos estén engañando entonces ahí el comentario fue Bueno hay otros mecanismos más sofisticados Por así decirlo que nos ayudan a prevenir un fraude un engaño que es importante en este contexto en este caso es el agujerito en ese ejemp pero ya vamos a ver que cuando empecemos a construir nuestras pruebas tenemos que analizar Cuáles son esos mecanismos está bien la
pregunta fue Cuáles son los mecanismos para prevenir engaño ya los vamos a ver sí podemos tener varias maneras de llegar a ese resultado verdad porque lo y entiendo es yo lo que con esto lo que demuestro es el resultado que es verdad sin Mostrar el proceso correcto ese proceso puede tener Es decir el resultado va a terminar siendo mismo pero con diferentes procesos puede haber no sé si es entendible mi pregunta Eh sí creo que entiendo y me parece que es correcto tal vez estos ejemplos simples no son los mejores para para digamos visualizar eso que decís pero sí la realidad es que para probar ciertas
cosas yo voy a tener diferentes técnicas Por así decirlo viene por ahí la pregunta no sí correcto es decir como que yo un resultado puedo tener varias maneras de hacerlo no tiene por qué ser eh un método solo puedo tener dos o tres métodos Exacto hasta llegar a ese resultado es es totalmente correcto ya vamos a ver que hay varias técnicas en en este mundo como para acercarse a los mismos problemas está bien eh pero de vuelta ya lo vamos a ver es muy correcto igual que lo estén observando ya e Bueno vamos a seguir así vamos entrando en en en tema Esto fue como una entrada en calor para imaginarnos un poco Hacia dónde vamos eh Y que no nos
no nos parezca tan ajeno lo que vamos a hacer Está bien entonces qué vimos en estos ejemplos que el verificador no aprende información que que yo no quiero revelar primero Cómo abrir la puerta segundo Dónde está wali eh pero sí es convencido de alguna manera de que yo sé esa información porque si no no hubiera podido producir estas pruebas está bien esa es como la idea básica de todo esto está por atrás de todo el más cómo hacemos eso no y y bueno está esta idea de interacción no O sea yo te doy una página donde está Y vos buscas no te das cuenta después me la das yo recorto pongo hay como un ida y vuelta No eso
también es importante que lo lo vayamos tomando en cuenta eh Y Bueno antes de de meternos de lleno en todo esto como para motivar un poquito el Por qué aprendemos de esto pensar un poco en las aplicaciones no eh fíjense que la privacidad está como como atrás de todo esto no O sea cuando hay información sensible que no quiero revelar es interesante encontrar estas aplicaciones donde puedo probar cosas sin revelar información sensible por ejemplo si yo tengo un balance en el banco muy grande y no quiero y quiero demostrarte que te puedo pagar algo pero no revelar mi balance bueno es
interesante para que después no venga alguien y me trate de buscar una forma de sacar de plata no e o bueno yo que sé esto de la la identidad yo tal vez quiero demostrar Eh mi edad pero que no sepas mi nombre para entrar en un baile con é no podría ser eh Y bueno hay otras otras cosas donde esto puede tener aplicación por ejemplo en sistemas de votación privados transacciones privadas los rollups en blockchain hay muchos que son sbm habrán visto en algún lado seguramente son mecanismos que usan c proof como el lo que está por detrás para tratar de mejorar temas como la
escalabilidad en sistemas blockchain Pero y algo que quiero ser muy claro es c proof no es blockchain si es una herramienta aparte que se integra bien para ciertas cosas pero que puede tener otras aplicaciones eso es interesante para que lo tengan en su cabeza como para otras cosas está tipo jcat como decías hoy capaz que puedo hacer algo con zge que no tenga nada que ver con blockchain y está bien está bien eso fue la intro Así que ahora vamos un poco al hueso eh Y les puse ahí un poquito para para descontracturar
Eh sí toca meterse un poquito en temas un poco más picantes eh Porque Bueno eh todo esto que tiene que ver con con fía en general es matemática aplicada al final del día entonces si no podemos entender cómo se construyen estas cosas No no vamos a llegar muy lejos y Bueno hay que sentar algunas bases Fede seguramente te acordas de alguna cosita de la otra charla Y eso asíendo Ah en casa Hay cosas que todavía no entiendo pero bueno ahora las vamos a entender sí bien e sí Bueno entonces eh vamos un poco ya de una sin mucha
vuelta Hola por allá que est bien Perdón que no presente sí no pasa nada no pasa nada cer tres al final eran Son seis mesas y hay seis personas así que est estamos bien Bueno entonces vamos a empezar hablando y esto dicho de paso les va a servir para otras cosas que tienen que ver con criptografía o bueno sistemas general vamos a empezar hablando de Campos finitos que es bastante tranqui capaz que se asustan un poquito con la anotación pero no tengan miedo que vian cosas peores Así que entonces Qué es un campo finito un campo en general en matemática es un conjunto Y en este conjunto básicamente tenemos definidas
algunas operaciones que son la suma la resta la multiplicación y la división o sea los números como los conocen son un campo está bien menos la división por cero los números reales lamos más técnicos son un campo tienen bien definidas es operaciones que quiere decir que si tomamos dos números y operamos nos da otro número que también está en el conjunto está bien no tiene mucho misterio por ejemplo había puesto el caso de Los Reales hay otros Campos no solo los números es como una definición más general y en particular fíjense que nosotros nos interesa cuando trabajamos
con computadoras y tenemos operaciones no hab han escuchado Bueno si conocen Cuando hacemos operaciones de punto flotante quiere decir que son números con coma tenemos imprecisiones pero en estas cosas que son tan precisas no de verificar algo una información exacta no podemos jugar con números con coma entonces existe esta idea de los campos finitos es un campo pero que tiene un conjunto finito asociado O sea que hay una cantidad de elementos finita y en particular nos interesa este campo les presento a eh el el campo de los enteros módulo p este lo van a ver en todos lados si estudian cosas de este
de este esta índole eh notación F gruesa es una para para señalar un campo sub p para decir que está asociada a un número p y fíjense que son solo los números de cer0 hasta p-1 Cuántos elementos hay en este campo p si contamos hay p elementos e yo no sé si lo puse Sí entonces por ejemplo podría ser el F podría ser f3 por ejemplo tendríamos 0 1 2 podría ser f17 0 1 3 hasta 16 podría ser F un número enorme tendremos un montón de
números salud Está bien o sea que es como paramétrico bien Entonces tenemos eso ahí y tenemos un par de problemas recién dijimos que era un campo no se acuerdan de la definición anterior un campo es un conjunto sobre el cual se definen cuatro operaciones suma resta multiplicación y división F que no siempre está definido eso no si yo sumo p men 1 + 1 o dos números grandes vamos a decir Seguramente se bayan de Rango una especie de overflow si quieren verlo No
eso por un lado y también para el otro lado si resto capaz que se van los negativos no 1 men 2 me da men1 está fuera de Conjunto y la división menos todavía Acá tienen un caso donde ni siquiera es un número entero el resultado entonces parec que estamos en problemas no bien se les Ocurre algo para tratar de remediar esta situación un poco se hace trampa pero se aplica el módulo claro acá respondieron también así que ya tenemos algunos es tal cual aplicamos la operación módulo y vamos a hablar un poquito de aritmética modular hasta acá Venimos bien quiero ir midiendo la
temperatura si es mucho poco si hay que repasarlo más y lo conversamos Cómo estamos ahora ahora Lo vamos a este justamente lo vamos construyendo progresivo preguntan AC o señalan que no saben lo que es aritmética modular La idea es presentarlo no hay problema pero quiero ver si venimos escalando bien Pareciera que sí sea nadie está entonces Qué es la aritmética modular Qué es la operación módulo la operación módulo es esto así sencillito que qué quiere decir
operación módulo es el resto entero de dividir a por p Entonces por ejemplo si hacemos 3 di 2 cuánto da eso 1 y Med o sea da 1 y sobran 1 no sobra 1 2 * 1 + 1 es 3 fíjense acá en esta expresión que escribí por eso vamos a detenernos en eso trabajemos con números enteros No si ustedes se acuerdan hacen la división 3 dividido 2 hacemos 2 por 1 ponemos el dos abajo restamos nos queda uno y ahí Terminamos
el proceso Entonces tenemos cociente uno resto uno y vamos a hablar en esos términos cociente y resto Está bien entonces es importante que que tengamos esto en cuenta y y que la visualicemos bien porque esto ya de entrada nos da una pista interesante que es si trabajamos en módulo siempre nos movemos en los números enteros nunca aparecen números fraccionales o irracionales o racionales racionales Son son División y aparte acá esto quiero quiero también sensar un poco Cómo estamos con el tema notación Y eso fíjense que hacer esta operación a
módulo p da B es lo mismo que lo que está acá abajo es encontrar un número K tal que p * K + B de a en el caso de la división de recién es 3 es ig a 2 por 1 o sea si p es 2 es 2 * 1 + 1 o sea que B es un y K es un está bien si quieren podemos hacer algún otro ejemplo si si es necesario para ir absorbiendo no no estamos bien no hay problema Si quieren hacemos un ejemplo por ejemplo
17 di 3 lo hacemos juntos 17 3 y bueno tenemos que 3 no hacemos 3 por 5 Ah pizarrón Ah pero no van a ver acá Exacto tenemos 3 * 5 + 2 K es 5 y b en este caso que es el resto es dos pueden hacer algún ejercicio más si quieren para para ir interiorizando pero el módulo es solo el resto muchas variantes Exacto es correcto y acá en esto por eso hice esta precisión de dónde tiene que estar B B tiene que estar en el campo tiene que
estar en nuestro conjunto base y es correcto porque hay muchos números capaz generan este patrón pero no hay problema si quieren capaz que lo podemos hacer en el pizarr vamos Ay marcadores Ah veamos podemos hacer para prun números sucesos para Perdón que per una de vuelta si los campos siempre son con números sucesivos o puede ser cualquier número mientras sea un conjunto finito buena pregunta Eh puede ser cualquier número mientras que vos puedas definir de alguna manera
todas las operaciones necesarias Okay si vos puedes definir suma resta multiplicación y división perfectamente puede ser un un un campo vamos a hacer así vamos a mover un poco el pizarrón y hacemos juntos un ejercicio perd ahí bien papá
que para que queden la grabación vamos a la llamada un segundito Noé pas Ah no voy a dejar de compartir pantalla un segundo todos ahí ahora sí no eh que lo tiró Technology no bien lo que decían es lo siguiente no a ver si escribo por acá tenemos a mod p est ustedes no está si
fuera eh No me está matando ustedes lo ven bien o se revés se Entonces cuál es la gracia que tenemos que encontrar un número K tal que p por K B ig a lo que decían por allá atrás correctamente vamos a poner números por ejemplo p ig 177 no y a no sé 21 para me complico la verad númer más chic cloner do y 5
no c y dos puede ser puede ser pero ustedes pensarían Acá bueno el caso base ser 5 es igual a 2 * 2 + 1 no está bien o bueno podrían pensar en 2 * 1 + 3 no O podrían pensar en 2 por -1 también por qué no más y esto es -2 O sea que + 7 no todas estas son soluciones de esta ecuación de acá está
bien pero Ven al curso desde no s si perfecto sigue sumando gente cor está pasando Todas estas son soluciones de esta ecuación yo lo que estoy requiriendo Es que además este número tiene que estar en un cierto conjunto si p es 2 tiene que estar en f2 = 0 1 Está bien entonces Esta es mi solución justamente yo lo estoy poniendo como una condición para que la operación
esté definida está bien no no esto es un conjunto Los esto Esto es para denotar un conjunto con elementos podría ser dos 3 cu no entre C y un no no tiene que ser uno de estos no es un intervalo o sea capaz que lo estás pensando así que quiere decir todos los números entre entre C y un buenoas no bien Ah claro tal cual acá estamos precisando un poco es Pon c y esto podría ser
cualquier conjunto claro cero Claro en el caso de que a fuera cu podría ser C con c siempre va a ser uno o todos estos fíjense que de hecho todas las soluciones acá también hay un caso con 2 por0 má 5 todas las soluciones están a la misma distancia Vamos a entrar a esto Esto es una clase equivalencia vamos de a poco pero está es correcto Sí hay muchas infinitas soluciones nos interesa una está y aparte cae en el conjunto de interés Y eso nos va a permitir definir una operación ya Perdón ya se está yendo
un poco al hueso esto vamos bien hasta ahí son bases sólidas y contundentes está no ten que ponerle nuna restricción porque ya la tiene la tiene B claro Yo le pedí a b que estuviera en el conjunto por lo tanto el resultado va a caer acá si Y ustedes digo pueden pueden verificarlo o pueden creerme que cualquier número que yo ponga acá siempre voy a encontrar un K tal que B caiga en el conjunto O sea que puedo poner cualquier número y siempre voy a caer acá es interesante y Tiene ciertas cosas aparte atrás ahora creo que tengo
anotadas algunas cosas por ahí remoto estamos bien escucharon las preguntas repito algoo bien perfecto la idea esta de los campos finitos es fundamental en criptografía o sea es muy importante que entiendan esto para poder entender después todas las cosas que vienen atrás bien volvemos a la programación habitual est
bueno que siga porque hay una cosa no me quedó Clara eso donde dijiste que habían varias posibilidades y tomamos una porque nos conviene que est en el conjunto creo que la división Define que el cociente es el número más grande estamos tomando siempre es el mínimo que precisamente la división trata de que que no haya resto entonces No no es por nuestra conveniencia Es que la la definición de la operación módulo que implícitamente tiene la división siempre te va a tener el resto entre cer y n siendo n el módulo Sí es correcto o sea observación es correcta No es la forma en la que se definen estas cosas en realidad o sea pensarlo como la división ayuda a
entender por qué estamos dentro de ese conjunto Pero estas cosas se definen en términos de nada de este tipo de ecuaciones que se llaman ecuaciones de di fantin lineal no importa por qué pero es verdad que si lo vemos como la división siempre como que estamos bien bien definidos y está bueno para para tenerlo como herramienta mental Sí cómo es tu nombre Perdón que ya has hecho varios comentarios Leo Leo Leo perfecto ya vo acordando Bueno pero lo que sí es seguro que el módulo a módulo P B es siempre un número menor que P O sea el módulo no es un número mayor porque ese número le puedes volver a calcular el módulo así sucesivamente y y siempre es
un número menor que P O sea eso está definido matemáticamente cor Sí sí sí es verdad o sea el resultado de la operación módulo siempre está eh definido en Ese Conjunto eh quería no dejar de precisar todas estas cosas que están por detrás también y Pero es verdad eh bien estamos bien Sí perfecto a ver si pasa esto bien entonces teniendo en cuenta esto s en vez de definir las operaciones como lo haríamos normalmente a+ p da c a por B da d lo que hacemos es definirlas siempre usando la operación
módulo para que el resultado siempre quede cao en nuestro conjunto dijimos que nuestro finito es fp los números entre 0 y p- 1 y al aplicar la operación módulo siempre queda definido la operación Que definida tal que el resultado está en Ese Conjunto está bien bien entonces si hacemos a+ B mod p nos da un valor que está en el conjunto por lo tanto decimos que está definida la operación mismo con la resta la multiplicación y la exponenciación de hecho ya que estamos ahí Leo hay un detalle que tiene que ver con los números negativos que es que el el módulo a veces Y más si si implementan programas
y usan la operación mdula definida en los lenguajes eh No da el resultado correcto y hay que hacer un pequeño cambio entonces por eso está bueno tener en cuenta cómo es la definición pero un detalle igual sí creo que normalmente se maneja con absoluto o sea es la parte entera positiva no de hecho es el número p sumado al resultado del módulo cuando es negativo por eso es raro pero es porque eso va de acuerdo con con la definición que hicimos pero igual esto en general no no hay que manejar Son detalles bien de implementación Exacto bien nos falta la
división está bien no no fue que la dejé porque no me cae bien no falta la división y es porque era más problemática se acuerdan que podía dar números que no son enteros no 3 div 2 da 1.5 entonces acá tenemos que definir algo que se llama la inversa modular inversa modular es un número que cumple o que es una solución de esta ecuación que está acá bien a por un número x da 1 y si piensan esto tiene sentido eh Yo supongo que no está voy a tener que voy dejar de compartir
Eh sí si lo piensan esto tiene sentido no porque cuando hacemos por ejemplo a a la men1 no en o sea cuando hablamos en cualquier número normalmente lo o mejor dicho cuando dividimos por un número también está esta notación a a la men1 quiere decir que a a la men1 es un número tal que a por a a la men1 da 1 esto sale de pasar esto no nada más entonces es como natural que queramos definir una cosa parecida que es esto que estab acá un número tal que cuando hacemos a por es
mod p nos da uno entonces parece algo parecido a la a la división entonces la inversa modular hay un algoritmo para calcularla que se llama el algoritmo euclidiano generalizado creo no me acuerdo lo tengo por acá pero más allá del algoritmo hay una pequeña condición que es importante para que siempre exista este número que es que p sea un número primo realidad es que a y p sean coprimos No si tienen verán que acá dejé como un un pequeño cosito que es un una hit picante porque son preguntas picantes que dejé para después si quieren eh
depende de como estemos Ya es demasiado eh Pero bueno si p es primo es un número primo que quiere decir que no tiene divisores con eh No tiene divisores menores a él pasa que todos los números en el campo voy a escribir acá pero igual están las transparencias Así que en las slide si por ejemplo tenemos f3 no fíjense que en realidad los divisores de tres son 1 y TR Entonces con eso garantizamos que todos los elementos tienen una inversa si este número no es primo eso No no es cierto Entonces es un problema Por lo tanto un
campo campo para nosotros es un un campo de esta forma donde este número es primo Aparte sí no te queda claro te doy un contra ejemplo si querés Sí pero justo uno es especial en ese sentido vamos a hacer un ejemplo vamos hacer solo es y un es la definición número Prim claro escucharon ahí o repito se y do se divide de que no no se puede dividir el tres se puede dividir
uno de esos tres números que están arriba justo o sea siempre el uno es el caso especial es el único por el cual admitimos que sea divisible porque todo Claro porque todo se divide por uno pero para el resto de los números s tenemos esta condición y es es importante creo que lo mejor que podemos hacer es ver un contraejemplo Eh sí es una presentación vamos a ver un contraejemplo yo esto siento que ahí ahí se ve mejor no sí eh un número que no sea primo chico cuatro cuatro Bueno entonces vamos
a poner P = 4 Entonces tenemos que fp F4 es 0 1 2 3 no Entonces fíjense lo siguiente si nosotros el uno vamos a dejarlo porque es un caso especial la inversa modular de uno es uno porque 1 por 1 cualquier número es uno bien pero vamos con dos por ejemplo sí Entonces si nosotros hacemos do por algún número x mod 4 que de 1 no podemos empezar a buscar números no
uno por ejemplo da 2 mod 4 esto da dos no nos sirve no 2 por 2 o sea esto es 4 mod 4 da 4 mod 4 dividimos 4 sobre 4 da 1 resto c Entonces esto cero no hacemos 2 * 3 modo 4 esto es 6 Perdón esto es se entiende esto es 6 o sea que 6 dio 4 da 1 sobre dos cociente 2 ningún número del conjunto y obviamente el o también 2 por 0 no 4 es
c fíjense que no hay ningún elemento en este conjunto y de hecho no hay ningún elemento en uno entero que haga que multiplicándolo por dos de uno no sea esto es un pequeño contraejemplo para decirles que si esto no es primo si este número no es primo hay Algunos números que pueden no tener inversa modular y como nosotros precisamos Definir la división para todo el conjunto o sea necesitamos que todos estos elementos tengan inversa modular por lo tanto si algunos no tienen no nos sirve como campo está bien sí bien Quedó claro el ejemplo por allá en
el en la llamada sí bien tenga inversa modular todos los elementos que tengan inversa modular saben Por qué es esto porque después vamos a empezar a hacer cuentas vamos a empezar a hacer operaciones Entonces si queremos hacer una división por algo un número con el cual no podemos dividir es un problema Entonces eh Ya como que nos limitamos de entrada queremos tener un una herramienta base que sea coherente por lo menos está bien Ho que tenía matemática el curso sí eh
Cómo en ve empezar en cer empieza en el puesto del otro lado ahí Vos como como sí eh es una una definición un poco exótica Si se quiere no se usa porque justamente genera problemas Podrías pensarlo no no creo que sea muy cómodo para trabajar y creo acá la comodidad premia mucho justamente es algo Bastante robusto puede ser un lindo ejercicio si querés puedes chequear bien eh una pregunta es medio por fuera pero antes te había preguntado si que todos los números eran en secuencia por este caso del número primo en realidad solo se cumple si son
justamente secuenciales Entonces no sé capaz que justo para este ejemplo pero no sé no me quedó claro Sí o sea cómo puedo responderte e Lo que pasa que usted con esta pregunta como que está yendo a casos capaz que exóticos si se quio como buscando alguna situación borde yo estoy seguro de que se puede llegar a definir de alguna manera algún campo con números que no sean secuenciales lo que pasa es que las operaciones seguramente o o las definiciones que vas a tener que hacer no van a ser tan tan simples o tan elegantes Si se
quiere la secuencialidad acá que te la da el hecho de que son números enteros es cómoda es es sencilla y eh Obviamente el hecho de que este campo esté compuesto por todos números secuenciales nos da la la garantía extra de que aparte vamos a tener estas inversas modulares existiendo Por ejemplo si la inversa modular de dos es nueve en un campo y resulta que el nueve no existe no está en el campo tenés un problema Está bien entonces el hecho de que tengas todos los números ordenaditos Aparte te asegura de que vas a tener ese número que estás buscando no es una respuesta exacta pero por lo
menos pero que ayude a ilustrar más o menos el Ah sí sí perfecto No yo preguntaba eso si se podía O sea si tenían que ser siempre secuenciales per o sea es lo ideal digamos es una buena práctica o algo así sí sí sí eh incluso Bueno después después capaz que vale vale tranqui seguí seguí no más capaz que me no no está Está bueno todas las preguntas que tengan creo que suma sí eh O sea no tengan no tengan miedo de preguntar Entonces qué nos permite hacer la inversa modular Definir la división O sea si yo quiero hacer a dividido B en vez de hacer eso hago a por la inversa
de B Está bien entonces con esto que hicimos definimos la división excepto por cer0 porque no tiene inversa modular en realidad la inversa de cer0 se define como cer0 y ahí queda todo chatito sí bueno acá algunas cosas anecdóticas por si después quieren ponerse a chivear esto lo pueden googlear está en Wikipedia en todos lados hay algunas propiedades como esta de que a má B mod p es lo mismo que a p má B mod mod pces esto permite hacer algunas demostraciones y demás o esta está bastante interesante después si la buscan se llama el teorema pequeño
deat asociado otro que se llama teorema de oiler que es a a la p mod p es a es decir si yo elevo a al al valor este que estamos usando como índice del campo me da vuelvo al mismo elemento esto curiosamente siempre no me acuerdo de la demostración la pueden buscar pero es es interesante eh Y esto quería comentar que en realidad el teorema no se define con estos se defin en otra cosa que se llama congruencia que dicho esa de paso las slides después las voy a compartir O sea que si quieren bichar esto tienen ahí unos recursos adicionales
eh la congruencia Por decirlo rápido tiene que ver con eso de que había infinitas soluciones te acordas que hablamos hoy que teníamos que cuando cuando estudiamos esa ecuaciones el número k y el número B teníamos 2 * 2 + 1 da 5 pero 2 * 0 + 5 la 5 todos esos números que son solución para distintos K son una como un conjunto que son todos equivalentes bajo esta relación de congruencia se llama no vo a entrar en detalle pero para que tengan una idea de que va por ahí sí bien eh antes de seguir una pequeña bromita Ahí antes de seguir eh Ahora sí
me interesa pausar un segundo ver cómo estamos si quedan dudas eh es como una entrada en calor todo esto así que me parece que es un buen momento Cómo estamos bien bien Sí capaz te consulto para qué era si me podías repetir para Qué usar lo del inverso del módulo bien lo del inverso es porque nosotros precisamos cuando trabajamos con un campo eh básicamente un campo es una cosa que un conjunto en el cual definimos suma resta multiplicación y división cosa de poder operar con naturalidad poder
despejar valores con naturalidad Sí entonces la inversa se usa para poder Definir la división Ese es el el el caso específico o sea imagínense que tenemos que hacer alguna cuenta en algún mecanismo alguna cosa y justo tenemos que despejar un valor y queremos hacer una división y no podemos está no no sirve Sí entonces por ahí viene el asunto porque precisamos esta esta batería de de mecanismos básicos que son básicos porque nadie discute que los números normales No Los Reales los podemos manejar normalmente dividiendo multiplicando entonces precisamos este este framework base para poder después empezar a hacer eh mecanismos sobre eso
está ayudó Sí sí Perfecto Bueno esto como como les decía campos finitos es sumamente importante está como por atrás de todo esto no los van a tener que manejar normalmente hay librerías para eso pero sí como las ideas que están por atrás Está bueno como ir tomándolas ahí en cuenta bien otra cosa básica hashing eh Alguien me puede decir que es una función de Hash me bueno decir sin miedo que toma un fuerte fuerte una función que toma un parámetro que puede ser
puede tener un tamaño arbitrario pero devuelve algo de tamaño fijo Sí y solo es fácil realizar la operación Pero es difícil conseguir la inversa correcto y tiene unas propiedades más como que si cambias una cosita chiquita del parámetro de entrada cambia todo la mitad del parámetro de salida perfecto y que no hay colisiones O sea que para dos para cualquier dos valores es difícil que haya colisiones perfecto como escucharon ahí remoto hay unas cuantas cosas se escuchó la
definición Sí sí perfecto vamos hacemos un repaso rápido en el pizarrón pero bien rápido porque cómo estamos de tiempo falta una hora ya eh bien Es como nada o sea lo que decía acá Francisco es nosotros tenemos un valor x cualquiera lo pasamos por esta caja de alguna manera que es la función de hing y nos da otro valor Sí entonces lo que decía Francisco es esto puede ser de un largo arbitrario sí mensaje tipo Hola mamá quiero mucho y acá sale un número s de un largo
fijo lo pueden pensar como una serie de de ceros y unos no binario con n posiciones entonces fijo eh Y acá se agregan algunas cosas que es bueno ir en esta dirección no es factible O sea que no es reversible esto y aparte también tiene que ser suficientemente tiene que mezclar suficientemente las cosas como para que hacer un cambio o sea si esto es uno yo pongo dos no puedo ha un patrón claro acá porque eso haría que fuera fácil de revertir y en otros casos también lo que buscamos es que no haya muchas bueno
general no haya mucha colisión significa que por ejemplo no puedo encontrar un número enseguida cu nunca escribo el cuatro sí que no puedo encontrar un número pronto que tiene el mismo valor acá es muy difícil encontrar dos dos puts que tengan el mismo resultado sí son tod estas como propiedades que de alguna manera es la manera fancy de decir que esto es como una licuadora de datos Está o sea yo licuo y no puedo volver a armar la banana echa pelota no Entonces es un poco la idea Sí me parece tonto pero es un ejemplo bastante visual es una banana no vas a conseguir lo mismo Exacto es muy bueno el ejemplo
de claro sí Exacto este bien volvemos ahí entonces básicamente Ese es el resumen de que es una función de Hash Entonces Con razón no sabía bueno tenemos entonces Campos finitos y de Hash dos herramientas básicas pero bastante simples una es Cómo sumar números enteros y multiplicar y coso y otra es como mezclar datos
listo eh un pequeño paréntesis acá les dejo un par de librerías por si quieren después hacer el tema este del challenge que les dejo al final acuérdense que están las slides tambén por las dudas No sé si Estaba sacando fotos están las slides después le comparto e porque no no no se van a poner a implementar estas cosas Son complejas de implementar estas cosas le hacen criptógrafo que tienen mucho atención al detalle y hay muchas cositas hay optimizaciones casi nunca si nunca multiplicamos estos números solo sino que se hacen transformaciones a formas exóticas con capaz que leen alguna vez
forma de monomer y cosas no sé es un kilombo mal no lo hagan no O si quieren háganlo pero van a ver que es difícil e y t hay como muchos detallecitos y también otra cosa los números primos estos de los que estaba hablando no son 17 son gigantescos tan grandes que en general los los tipos primitivos de los lenguajes que usamos no nos permiten representarlos está tipo ustedes escriben un número cuando están programando en python y no pasa nada pero escriben un número gigantesco y le va a decir no me da para representar esto hacé algo vas ahí escribí una librería para manejar números grandes que es lo que
dice ahí así que tienen esto si quieren después les planteo un ejercicio después sicopa si no tranqu Entonces tenemos algunas cositas ya no hay cositas podemos construir algo con esto Qué opinan si no quién más no si no no no Quién dice que no Acá no podes probar cositas pero una proof en el en el chat que dicen a alguien cree que esto es suficiente para hac una proof es
total el baño salís por la puerta del frente acá y a la izquierda no no hacia fuera o sea solo salir claro lo que quiero decir es todavía no vimos ningún ejemplo de pero vimos estos ejercicios mentales no la idea es podría llegar a construir alguna algú esquema matemático en el cual yo te pueda demostrar algo sin revelarte la información solo con estas herramientas increíblemente sí se puede se puede
eh voy a hacer un poquito de trampa porque voy a usar una herramienta más pero que es más de lo mismo así que está bien me lo permiten está entonces Aunque es muy sencillo eh Este primer ejemplo tiene algunas cosas que son interesantes y vamos a enfocarnos bien en esto porque vamos a aprender algunas cositas que después van a ser útiles está eh el primer un ejemplo se llama protocolo de snor snor es un tipo que que es muy famoso en criptografía hay un un tipo de firmas que se llaman firmas de de snor eso lo habrán visto eh Y interesantemente el paper Don es un paper es un libro no me acuerdo pero es
del mismo año de cuando se hizo la publicación de o se mencionó por primera vez a lao knowledge proof O sea que estaba todo medio ahí era bueno está estamos explorando no eh les dejo ahí el el como la cita después lo buscan si quieren sí Entonces vamos a ver el protocolo de snor eh vamos arriba sin mucho preludio el objetivo es demostrar el conocimiento de un logaritmo discreto de un valor I que quiero decir con esto no está logaritmo les les Suena la operación sí el logaritmo es cuando si yo escribo el pizarrón lo ven
en los que están en llamada pero no se muestra la grabación no está bien sí o no Si se queda grabación no no Claro no no la grabación pero Ah está listo listo entonces pero igual es sencillo igual lo que quiero decir con probar el conocimiento de logaritmo discreto es que yo tengo un número I está yo tengo acá algún valor G y acá x sí lo que yo quiero decir con esta frase es que quiero demostrarle a
alguien que conozco esto sin revelarlo no Y ustedes Me podrán decir pero Franco yo tengo este número y tengo este calcúlalo y ya está no me revelaste nada pero lo calculo bueno no no es tan simple de hecho porque esto es el logaritmo discreto y en el medio Acá está la operación mod p o mod mod q Si se quiere después pero la idea es yo tengo por acá algún número p estoy haciendo mod p entonces no es tan fácil porque cuando me paso de p empiezo de vuelta sí voy vuelvo hasta contar 0 1 2 3 y multiplico de vuelta y vuelvo a contar me paso Entonces yo no sé si o sea este número No no es tan fácil revertir ese proceso
créamelo eso por ahora no no quiero entrar mucho en detalle porque tendríamos que hablar de de grupos y otras cosas y no quiero hablar de eso ahora eh Hay una pregunta ahí en el no me acordaba de de del planteo que vos hiciste de si podríamos definir algún alún Zero knowledge proof y Y tenemos una ecuación así no le podemos hacer un Hash a esas tres variables que tenemos y con el Hash poder verificar si se llega el resultado se vos decís de bueno s no sé si el Hash de las tres cosas
necesariamente pero sí de alguna manera un Hash o sea un has es una prueba de que yo conozco cosas pero la única forma que vos tenés de demostrar que un input de un Hash da el Hash es revelando el input me explico entonces Imagínate que vos tuvieras no sé calculas el Hash de independientemente cómo lo quieras hacer pero de I G y x con l eso es lo que sugerís Y esto te da H chiquito no como yo uso para demostrarle a alguien que yo conozco x Bueno le tengo que dar esto esto esto y aparte de esto y ahí
calcula el Hash y y verifica pero ahí estoy revelando X en el proceso sí no sé si iba por ahí la sugerencia pero justamente No es tan fácil construir un mecanismo donde yo te pruebo que s esto Tal que se cumple la condición esta No es tan fácil porque Generalmente hay que revelar x y yo no quiero eso justo es el objetivo de este caso Está bien claro Entonces lo voy a dejar acá atrás igual para por referencia pero ahí está el problema no cómo yo hago para probarte que conozco un x que cumple esto sin darte el X pu si te lo doy claramente vos podés hacer
la cuenta entonces como les decía esto se basa en que usamos un grupo cíclico de orden q generador Gen no importa eso lo vamos a ver después pero lo que la idea es que bueno esto nos va a permitir empezar a jugar un poquito Entonces vamos a Pablo al probador al y Virginia al verifier suele poneren cosas as tenemos a les voy aar ahora este mecanismo y después lo vamos a analizar sí sea que Síganme El setting general y después
entramos en detalle me creen por ahora estoy haciendo un esfuerzo en que me crean con fundamento pero este a veces pido Que tengan un poquito de fe Entonces qué valores son públicos acá G e i y lo que quiero probar es que conozco x tal que se cumple esta relación Entonces miren lo que hacemos Pablo selecciona un valor k al azar de todo nuestro fp toma un valor no importa cuál y Calcula g a la k eso da un número r se lo manda Virginia Toma este número es un número no significa
nada y la gracia un poco es que no es reversible fácilmente este proceso después entramos en ese detalle pero de los grupos grandes es que ación inversa no es factible y esto sin entrar mucho en detalle es lo que está por detrás por ejemplo de las claves públicas y privadas en blockchain en general en sistema bueno generalmente la seguridad de esas construcciones se basa justamente en la no reversibilidad del logaritmo discreto o lo que fuera Pablo Calcula ese número r g a la k no tiene mucho misterio g a la k modo p pero no importa eh se lo manda Virginia Virginia lo guarda
Virginia después le dice Che Mira te voy a mandar este número c que también lo elijo al azar te lo mando bien y después Pablo Calcula este número s que es k + c * x fíjense que x es el valor secreto mod Q que q es el el orden del grupo cíclico ya vamos a entrar Sí y después Virginia hace una cuenta Calcula g a la s mod p y verifica que sea igual a r que fue el valor que le mandó al principio por I que es ese valor público a la c que es el valor que ella
envió Yo sé que son un montón de letras y que capaz que al principio cuesta un poco seguir pero vamos a tratar de hacer un poco de sentido de esto fíjense que x nunca viaja nunca se muestra no lo único que se muestra son cosas que están asociadas en particular el s O sea que mientras que s no sea reverti fácilmente x está como protegido Sí y del otro lado en la verificación no se usa x se usan otros números es como que hay como una forma de verificar medio mágicamente que hay dos cosas que son iguales solo si ese s está bien
calculado sí es es medio Místico mágico así no una pregunta Pero sabiendo ese procedimiento y el valor de G y tú no puedes calcular el valor de X no puedes calcular el valor de X No hay manera No hay manera O sea hay una manera que esa Fuerza bruta que eso siempre es algo que uno puede hacer en estos sistemas la gracia es hacer un problema que sea muy difícil cosa de que la Fuerza bruta no sea una opción está bien pero no hay no hay forma de revertir este proceso si quieren lo podemos conversar también más después más tranquilos o si viene mismo eh pero pero no curiosamente no porque
todo esto se basa en que para hacer esta este proceso de revertir hay que poder resolver ese logaritmo discreto fácil y no es tan fácil números eh No no traje ejemplos de números pero podríamos hacerlo si quieren si quieren ahora tiramos un Mag es más vamos a hacerlo vamos a hacerlo me animo a hacerlo si sale mal no pasa nada vamos x tien que pertenecer grupo o son números pued est de los
dos Sí sí sí eh No no no es una buena pregunta y por eso quería evitar este esta parte de los números no sé si tienen que Porque como hay un grupo acá metido de fondo que no tiene por qué estar en el campo finito pues como una cosa que puede ser aparte Puede que no sea tan directo pero quiero pensar en un ejemplo si yo tengo tod mis grupo por por
Cuáles claro es lo que yo pensaba a ver decime que es lo que está diciendo que no estoy sigiendo no no TR no hay bazos pertenecen al mismo campo finito tod est pertenecen a fp si vos que I es igual a g sobre x no al revés G x módulo p Sí si vos tenés que x es 0 y G es 1 men perd por qué esto sería
cero Ah puede decir porque está en el campo Sí o sea Generalmente no no se usa cero o sea normalmente cuando haces un sampling o sea cuando elegí un valor en fp Random se suele poner esto quiere decir que cero no es una opción y tampoco es una opción Generalmente números chicos O sea si vos elegís uno con l Y te van a atacar por Fuerza bruta capaz que lo primero queon es uno entonces hay como algunas por eso le decía hay Como algunos temas acá que que son detalles que lo maneja gente que que está en el tema que tiene que ver con eso o sea no no puede ser trivial la solución eh pero digo obviamente hay casos acá que son bastante directos no se olviden
que esto es un número gigantesco ahora después vemos alguno para que se haan una idea de la dimensión está son números muy grandes está bien pero responde esto la pregunta claro Entonces no tiene sentido perc eh o sea esto no es cero seguro pertenecen a esto pero hay un tema con el cálculo de ese por eso capaz yo traigo un ejemplo bien digerido para la próxima mejor así no lo hacemos ahora que seguramente lo haga mal y Pero esto se calcula no sé si están viendo ahí mod q un poco más abajo la cámara cámara ahí ahí entonces Calcula Mod Q que q es el orden de el el
grupo generado por g o sea se escribe así eh No no no quiero realmente ahondar en esto si no lo haces ahora no la próxima vez podría mandar por mail podría podría mandarlo me gusta me gusta tu idea lo lo mando mejor me convenciste Me convenciste sí yo les mando un ejemplo igual ya les adelanto el challenge era justamente que traten de implementar esto Así que si quieren también pueden tratar hacer en sus casas y ver los detalles disculpas que no no tenía esto
preparado traté de adelantarme A todo pero difícil bien entonces volvemos a la programación habitual no se entendió el el layout de est o sea cómo está presentado Sí hay unidad y vuelta se mandan Algunos números que no no significan mucho y hay una verificación final sí y listo ahora un detallecito antes de seguir No si Pablo en todo esto se le ocurre no calcular el s De esta manera porque no conoce el x y mandar cualquier cosa es muy probable que la verificación falle entonces tener conocimiento del x
ayuda a que el protocolo funcione cierre y no tener conocimiento del x le plantea un problema a Pablo porque justamente le complica convencerme lo que quiere convencerme que es esta verificación final entonces puse esto pens íbamos a pasar enseguida la explicación pero final no bastante entonces que vamos poner en en palabr o sea en expresiones eso que acabamos de decir tiene sentido esa verificación final bueno tiene sentido yo les dejo esto para que después lo bichen Cómo es el la validación Y por qué da la cuenta
pero la idea justamente es demostrar que un lado de la ecuación es igual al otro Sí después si x está en el medio o no es otra historia pero si las dos cosas son iguales deberían dar lo mismo Está bien se conectó Ahí está Hola Pamela eh Dónde está vamos bastante avanzados Pamela Así que capaz que después después bicha un poquito lo que vino antes Eh bueno repito esto no O sea gracias gracias por favor Es que hoy me tocaba pasas a producción y bueno nos zafamos nos zamos pero s ya días complicados los
pasajes a produc Sí sí se en se entiende No te preocupes queda todo grabado sí creo pero está grabando creo que estoy grabando e Bueno entonces esto no o sea estamos hablando de que tenemos este I de vuelta y queremos ver si la verificación final tiene sentido si no tiene sentido todo esto no tiene sentido no Entonces yo les dejo acá después esto lo pueden si quieren trabajar todo tienen las propiedades despu para hachar pero empiezan a hacer algunas sustituciones ven algunas cosas itas ahí y llegan al final a que los dos miembros de esta ecuación son iguales no lo vamos a hacer ahora Tengan fe Si no después lo hichan un
poquito se la verificación tiene sentido segundo Por qué esos Pasos Por qué al principio hicimos que Pablo eligiera un K se lo mandara en forma r no G la k Por qué después respondió Virginia con c no parece arbitrario eso parece como medio traído de los pelos pero no no es traído de los pelos porque hay Como algunos detalles eh si si por ejemplo Virginia siempre elige el valor el mismo valor c porque no sé porque no tiene ganas de seguir eligiendo valores distintos Qué pasa Qué pasa entonces ese va a ser
siempre el mismo Sí si yo bueno no no va a ser siempre el mismo pero si si siempre me manda c siempre me manda un valor c yo puedo tratar de calcular algún s que que verifique toda esta expresión sé que capaz que lo estoy diciendo Así medio extraño pero en realidad es lo que pasa o sea si yo conozco C de antemano puedo empezar a tratar de calcular valores de s De antemano y nadie tampoco me me fuerza a mí a elegir un k al azar podría yo siempre elegir el mismo K siempre tener el mismo resultado entonces como que rompería un poco todo esto sí consulta sí partimos de la base para crear este tipo de programas pensándolo este el
punto de vista computacional de que tenemos algoritmos que generan números al azar para porque si lo hace una persona se entiende que es cerebral digamos pero sí correcto correcto es una observación totalmente correcta este tiene que ser un buen sampling de de una distribución que normalmente es uniforme toda la saraza pero si tiene que estar bien implementado si no va a tener problemas y de vuelta volvemos sobre que estas aplicaciones la hacen las hacen criptos o sea las hacen personas que están todo el día en esto para verificar que esos detalles no fallen Está bueno que lo observen porque ahí están los astill Entonces espero haberlos
convencido de que si yo siempre elijo el mismo c o si ya sé c me van a mandar como que pued cosas no Entonces eso por un lado y después fíjense que si si yo este no elijo un número al azar y yo estoy probando el el logaritmo de un número o sea estoy estoy probando conocimiento de un número fijo x va a pasar que este r este r siempre va a ser el mismo este x siempre va a ser el mismo Entonces para
un mismo c siempre voy a tener el mismo resultado Entonces eso también nos permite como adelantarnos un poco tipo yo tengo el mismo K el mismo c y empiezo a calcular Bueno si me manda uno va a dar esto tipo empiezo a probar valores está esto verifica si me manda dos empiezo a calcular y lleva un s que verifica si me manda tres Y entonces puedo hacer como una especie de me adelanto a los jugada y tengo valores precalculo que valores porque qué quiero decir con un valor precalculo quiero decir un s que verifica la validación final claro es como el ejemplo que decían de
de Wally de recortar Cómo sé que no me estás dando lo del bolsillo por eso fue bueno ejemplo el equivalente matemático Deer Exacto Exacto Entonces eh estas dos cosas en conjunción hacen que yo no pueda prepararme a la información que va a venir eh entonces de alguna manera Son son como dos ingredientes importantes uno es lo que se llama la aleatoriedad o el randomness en estos algoritmos que dicho es de paso en los mecanismos de firma en general pasa lo mismo se introducen pequeñas
aleatoriedades para que cuando yo firmo una cosa no de el mismo resultado que la vez anterior entonces evitas ataques O también para encriptar cosas Si yo encripto algo y da siempre el mismo resultado si yo logro desencriptar Entonces siempre Sé que si viene esto encriptado es es esto no no sé si me expliqué ahí capaz que voy vuelta no no voy voy voy si yo tengo la máquina esa que hablamos hoy no x Hash I ir de acá para acá no es fácil No pero si yo empiezo a probar valores y justo encuentro uno que da esto no entonces
cada vez O sea si esto es a Y esto es cualquier cosa no siempre que yo ve a esto voy a sa Ah entonces el input fue a ahora si yo esto elemento algo que siempre varía Entonces esto siempre va a ser distinto encripto y uso este encripto otra vez y uso a1 y así sucesivamente no entonces como que introduzco aleatoriedad en el proceso y eso permite evitar este tipo de ataques donde voy hacia atrás ataques ahí que no sé si es un término que est familiarizados pero suele usar mucho en
criptografía Cómo puedo atacar este sistema y cómo lo puedo romper Sí y el otro elemento que no es el Random es ese challenge que le manda Virginia que justamente es algo que que yo no puedo anticipar entonces elijo un número Random que hace que siempre varíe el resultado y no me puedo anticipar a lo que me va a mandar Entonces como no me anticipo Espero y si conozco x calculo ese si no no como una prueba pero podes mandarle más exacto es eso es parte Eso es parte la construcción así como es yo lo mando
y no confío en que vos lo calculas te mando otro Y si no confío te mando otro Y vos me tenés que siempre responder con cosas que den claro es como una forma la repetición de decir okay No es tipo algo preparado está bien claro y que lo que logre adivinar todos esos alar muy poco probable debe saber exao tal cual es tal cual Lo escribiste en la medida que yo aumento el número de de pruebas cada vez la probabilidad de que me estén mintiendo es menor no entonces por eso está construido de esta manera tiene hasta un un un nombre este
tipo de protocolos que se llaman protocolos Sigma digo Son conocidos está pero va por ahí o sea Está bueno empezamos como a ver bondades de todo esto no e cómo sería esto Ah sí Y yo revelo información en todo este proceso que quiere decir yo como verificador puedo saber cuál es el valor de X el el el exponente ese no se acuerdan y igual g a la x mod p yo estaba tratando de probar que conozco esto No yo en todo este proceso como como probador estoy revelando información y la realidad que no porque
para revelar para para yo poder aprender Cuál es el valor de X tengo que resolver esta ecuación y Esto justamente es lo que es medio difícil particularmente es difícil por porque está acá en el medio si no estuviera acá fíjense que resolver esto bajo la cámara no ahí si no estuviera acá fíjense que resolver s = c por x mod p y acá entran las inversas modulares como preguntaban o sea AC K es c no fíjense que si yo hago paso esto para allá de alguna manera no y hago s por c la men1
ig x faltan los mod Pero no importa O sea si yo no pongo el K adicionalmente puedo revertir y revelo x ya que no me sirve Entonces también K ayuda es una bondad de que esto no no está filtrando información me siguieron esta parte es como como despejar no se yo puedo despejar por eso K no va a ser cero yo lo que estoy viendo es el caso Si yo fuera cero Si no existiera qué pasar ahí si es otra cosa pasa esto de que revertir este proceso No es tan fácil y pasa lo mismo que preguntaban hoy K
tampoco va a ser uno porque ahí es fácil resto uno acá va a ser un número gigantesco también no y que va a ser difícil de de volver para atrás está bien Sí los convencí ell Sí si tienen dudas lo repasamos no pasa nada me gusta lograr ahí Pero entonces para calcular el X Siempre tenés que usar la inversa No es que no no lo calculas el X justamente yo acá lo que estoy queriendo demostrarles Es que la presencia de K hace que este proceso no sea tan fácil de revertir si no estuviera acá sí lo
sería Y tenemos un problema porque el verificador puede averiguar x sí sí viene por ahí tenemos cuando construimos estas cosas más para el tema no revelar información tenemos que asegurarnos de estos detalle porque si no estamos haciendo todo esto pedo perdón que la expresión pero bueno sí bien bueno y yo sé que estamos cansados ya de todo este rato son y medi que vamos a a darle un poquito más y Tratamos de cerrar pronto pero bueno
vieron que más allá de que no es obvio esto no estamos usando cosas muy locas no solo estamos usando cuentas y y una comunicación y de vuelta no Entonces está bueno porque no tiene nada muy fancy muy loco podemos entenderlo verdón entonces recapitulando la verificación tiene sentido vimos que hay una demostración Por más que no la hicimos el verificador no conociendo x no puede producir s de forma fácil O sea que tiene que tener conocimiento x para que pueda responder y aparte no podemos inferir nada de los valores de s O sea que es Z de Ah ahí
está el asunto está yo hago todo este proceso y me convenc de conocés un valor x pero nunca me lo decís ustedes me dirán pero es bastante tonto De qué me sirve saber un valor bueno no sirve para mucho la verdad pero es un ejemplo básico que ya nos permite empezar a ver elementos que van a estar en otras pruebas más complejas está bien y un poco acá lo que decía Francisco podemos repetir esto n veces hasta convencer al verificador hasta que se canse de mandarnos valores y está bien está bien sabes el X está bien basta de mandarme cosas sí bien eh antes de decir
esto Cómo estamos con esto bien estn muy cansados quieren seguir perfecto a ir hasta el final bueno Y esto en realidad si se fijan Son son tres como propiedades son tres cosas características que mapean con las tres propiedades que tienen las pruebas de de conocimiento que son completitud robustez y opcionalmente conocimiento cero esta slide se las dejo como para ver después no no quiero entrar en el detalle fino de Qué quiere decir todo
esto pero completitud es que la verificación sea correcta tenga sentido robustez significa que no me podes mandar un valor s válido sin saber la información secreta y conocimiento cero significa que yo no aprendo nada como verificador de la información secreta tenemos la pregunta es esto no sirve para algo en una aplicación realo un valor y la verdad que no O sea como un protocolo de identificación pero después apareci lasmas digitales
mismo pero mejor O sea que no sirve para mucho esto pero nos da una idea de cosas básicas fundamentales para poder construir cosas más complejas y aparte es muy específico o sea es una prueba de conocimiento cero de un logaritmo discreto tres pepinos el logaritmo discreto pero capaz que me importa probarte que conozco Eh mi cédula y que mi cédula está entre un cierto número probarte que mi balance en etherium es positivo con esas cosas nos interesan no un valor entonces para lograr hacer esas cosas
vamos a precisar armar como algo un poco más complejo pruebas ambas cosas sea prueba en esencia AC y desp caput pero si o sea esta idea del ida y vuelta es algo que va a estar en muchas pruebas y ahora vamos a ver algo más sobre eso que es importante lo que va a cambiar es cuál es el mecanismo de verificación y aparte también cambia un poco lo que decí de cómo transformo cómo codifico mi información en algo que
pueda usar ambas cosas son ciertas para para segir haciéndose una idea Está buena tod eh bien no sé ni dónde estamos Eh bueno entonces sía notas no las usé bueno eh un detallecito más que no es menor dieron que esto era como un ida y vuelta no O sea Pablo le mandaba un valor y después respondía y después no sé qué normalmente Esto no es deseable en en nuestros sistemas normales o sea cuando firmamos algo digitalmente yo te envío la firma y chequea cuando se te cante O
sea no me importa pero acá no tenemos esa bondad o sea tenemos que esperar a que nos responda el verificador calcular mandarle Y si nos manda de vuelta a calcular Entonces es como asincrónico este este sistema y y no es muy bueno eso para la velocidad de los procesos no porque tengo esperar podríamos hacer todo en un solo paso reducir todo esto el día de vuelta no no no es una pregunta para que la piensen la respondan es justamente para sugerir que Estaría bueno y en realidad sí se puede no y acá se usa una cosa que se llama la transformación de estoy tirando as cosas Tom Tom pero
eh No no por favor eh es así o sea es un tema difícil y hay que sentar algunas bases entonces con esto vamos a ir cerrando s ya Pero qué es la transformación de Fiat es sustituir el challenge sí por algo que sea pseudo aleatorio no O sea yo no espero que me mandes un challenge sino que calculo de alguna manera un número que es como si fuera Random está y algo que no sé si dijimos de las funciones de Hash es que también se llaman funciones seudo Random o sea es como que yo le doy un número de entrada
y escupen algo que parece aleatorio O sea no Entonces por ahí viene el asunto vamos a usar hashes y lo que vamos a hasar es lo que lo que se llama la conversación o sea como que yo estoy hablando con Francisco y le digo Acá está mi primer número tu respuesta va a ser el Hash y yo voy a calcular ese y te lo voy a mandar y tu respuesta va a ser mi mensaje inicial más mi más tu Challenge más lo que yo te respondí entonces así toda la conversación queda atada es medio medio entreverado capaz de ver pero acá lo tienen yo te mando un r vos me vas a devolver y te simulo que
me vas a devolver el Hash de es valor y como r es aleatorio en realidad Porque es yo elegí un valor aleatorio s también va a ser una cosa aleatoria entonces yo voy a tener que calcular un s y después voy a calcular la respuesta como el Hash de rc1 s1 y así lo puedo hacer muchas veces esto se va acumulando no O sea cada vez la conversación es más larga pero lo que tiene interesante esto es que yo le puedo dar toda esta información digerida al al verificador y el verificador puede calcular que la conversación se da de esa manera sí se puede calcular que el Hash de r dace un no tiene que creerte que vos calculaste
inicial de manera aleatoria porque no pudo Sí podría no haberlo hecho pero no tiene forma de predecir los hashes sí la función Hash es pública es pública pero no es reversible incluso aunque no sea aleatorio el número no s si si gustan intentar romperlo Me encantaría como ejercicio no es trivial o sea realmente no es trivial hay una pregunta acá en el el chat lo que yo digo pensándolo técnicamente no
disculpen que que me gano la parte técnica la performance de esto se ganaría en esta transformación porque yo de la otra forma veo que va a haber un trágico de unic de performance No acá en esto es como que vectoriza en sentido y esta transformación hace que que la la performance mejore en esto contribuye más allá digo de que de la seguridad que estoy entendiendome es una buena pregunta me atrevería a decir que la performance se ve disminuida porque los hases son funciones más pesadas que
elegir un número al azar eh pero lo que perdés en performance lo ganá en sincronía está Lo que sí es interesante es elegir bien una función de Hash o sea una función de Hash muy lenta capaz que te hace que tus pruebas sean complejas de calcular eh una función de Hash más rápida quizás no pero tenés problemas de colisiones como decía hoy eh Francisco entonces también esto es es un balance pero es una pregunta que no es específica de este caso de uso cuando uno firma pasa lo mismo cuando uno encripta pasa lo mismo e pero nada señalar eso que no es un tema de que vos ganes en performance
ganás en sincronía versus asincronía eh perfectamente podrías tener un un protocolo donde tengas algo asincrónico y realmente haya comunicaciones pero las comunicaciones También tienen latencia O sea hay como muchos factores que estudiar Eh quiero decir que como que no no es tanto por ahí en análisis sino en más darte una prueba de digería Sí bien gracias por favor y lo otro a mencionar ahí es que el cálculo de la prueba o sea el cálculo del Hash de r del Hash no sé qué lo hace el probador no lo hace el que te va a dar una prueba y te da una prueba Entonces vos podrías verificar el
tema este que la conversación es válida o podrías no hacerlo y directamente validar los resultados eh Eso depende un poco del verificador vamos a decir eh bien la transformación esta básicamente es esto sí entonces acá nos adelantamos a las respuestas del del verificador y Bueno hacemos que eh Todo esto lo podamos dar como una prueba así Tom ten la prueba eh un detalle acá que quizás lo ven toda esta secuencia de mensajes se llama transcript porque a veces lo pueden ver es nada como lenguaje específico y y bueno con eso hacemos de una prueba
interactiva una prueba no interactiva Y esta idea no interactiva van a ver que tambén figuran nombres que vamos a ver después Así que quédense con esto y Bueno podemos transformar una cosa en otra con esta estítica esta transformación que es nada más que eso que vimos e bueno Esto fue la primera clase eh Nada repasando un poquito hablamos sobre Campos finitos y hashes vimos un ejemplo de de una prueba de conocimiento cero después la me gustaría que la analicen bien si quieren después vean detalles preguntas manden
en el grupo preguntas si tienen también no hay problema eh vimos como este ciclo básico de se llama comit el primer paso challenge y response definimos algunas propiedades y vimos Cómo transformar de interactivo o no interactivo Sí ustedes me dirán bueno está montonazo Para qué me sirve todo esto hay hay algunas cosas que que podemos sacar de todo esto para hacer las construcciones que van a venir después por ejemplo Esto del ida y vuelta es una idea que capaz que No la vamos a tener que pensar tanto porque nos va a parecer natural cuando hablemos de protocolos más más pesados o sea esto de Che te va a mandar el probador algo y vos le tenés que responder a algo y te
va a mandar otra cosa ya lo vieron acá va a ser la misma idea con cosas más complejas de verificación Tal vez sí era lo que hablamos hoy eh les dejo por acá algunos otros protocolos sir knowledge que son simples vamos a decir eh los pueden Bueno bulletproof no es simple lombo Así que no no capaz que no lo miren pero si tienen ganas de ver algo más desafiante ahí pero y con esto quiero cerrar son de un único propósito por ejemplo el el protocolo de snor servía para qué salud para mostrar conocimiento de un logaritmo discreto el
protocolo Bullet o las Bullet proofs sirven para mostrar que un número está en un Rango pónganle los demás no me acuerdo pero lo pueden buscar y y van a ver que son de un solo propósito Sí entonces La pregunta es pudiéramos hacer algo más general sí algo donde yo como usuario pudiera programar qué es lo que quiero mostrar qué es lo que quiero probar Y entonces con esta idea lo dejo pensando porque en realidad es a lo que vamos y es lo que hacen las las proof modernas le permiten al usuario programar qué es lo que quieren Mostrar y ahí es donde nosotros como
desarrolladores entramos está piénsenlo dianlo eh Ya vamos a ver cómo y Bueno les quiero dejar acá como un challenge si se animan o si tienen ganas a probar esto yo sé que estamos en fechas complicadas y que todos tenemos responsabilidades pero si les pinta sepan que está podrían tratar de programar el protocolo que es un pueden hacer en rust javascript tien gas lo que tengan ganas Lo importante es tratar de entender los los elementos que estuvimos hablando se complicó el amigo invisible de fin de año se complicó no no no tranqui O sea no pasa nada si no tienen ganas de hacerlo yo lo dejo abierto como
para si les Pinta y obviamente si lo hacen y tienen dudas cuenten conmigo para para discutir yo que s sacarse dudas lo que quieran había una mano levantada sí tenés alguna guía base como para implementar el protocolo eh No pero lo que les puedo decir es capaz que hagan una búsqueda en github capaz en Google y a ver si si aparece alguna implementación como para tener de referencia está y pueden usar las librerías que les dejé acá como base también si si quisieran sí podrías enviar el la presentación Cómo Perdón podrías enviar la
presentación Sí Sí la voy a enviar no se preocupen que ahora lleo a casa y me ocupo esos temitas operativos e Bueno nada Eso fue la primer clase Espero no haber sido tan plomazo es un tema difícil o sea es como no hay mucha forma de embelesar lo es difícil eh Pero bueno Confío en que si les copó Y si quieren ver más eh nos vamos a ver en la segunda clase y si les recan B No se preocupen está todo bien pero bueno sepan que estoy acá para responder dudas y bueno para lo que preciso Sí bien gracias gracias muchas gracias muchas gracias una última preguntita
puedo hacer Cómo no eh tiene algo que ver eh homomorfismo Y som morfismo con todo esto tiene que ver tiene su que ver eh Porque más o menos lo que me acuerdo más o menos de de la cuando estos tema claro eh podemos hablar de de isomorfismo después si querés no sí no entremos No entremos en eso hoy pero después si querés en alguna charla post clase podemos verlo eh tiene su que ver también con con con grupos más que nada y con con establecer que hay isomorfismos de los grupos a los enteros y esas cosas que a veces ayudan a
entender cosas eh pero está es como un tema ahí medio s Track Pero está bien se se puede charlar eh lo vemos si querés después Ah bueno Voy a guardar la grabación y y nada este