# Capítulo 4: *"Keys, Addresses"* ###### tags: `MB` [TOC] Llegamos al cuarto capítulo del seminario socrático de Mastering Bitcoin (MB). Estas son las actividades a realizar: ## Material Principal Para esta sesión socrática debes leer el [Capítulo 4: *"Keys, Addresses"*](https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch04.asciidoc#keys-addresses) del Libro **Mastering Bitcoin**. Estos son los enlaces a la versión del [libro en inglés](https://github.com/bitcoinbook/bitcoinbook) y la versión del [libro en español](https://drive.google.com/file/d/18NDHehFLGBDi_EVQQ59wQ2I99cvrrTJZ/view?usp=sharing). **Se recomienda leer en inglés, ya que es la versión más actualizada y completa**, pero es tu elección. Hemos estructurado las sesiones de acuerdo con los capítulos del libro en inglés. :::info :bangbang: **Importante:** Los términos técnicos siempre se dirán en inglés para facilitar el aprendizaje del idioma y la inmersión en el desarrollo de software de Bitcoin y LN. [Ver metodología de traducción](https://docs.google.com/document/d/1uPy771hf2xUElcaOR_Sk9NTqODeg9QZENYWL9leQc1g/edit?usp=sharing). ::: ## Lecturas complementarias | Contenido | Tiempo (min) | |:--------- |:---------:| |[Codificación Base58Check](https://es.bitcoin.it/wiki/Codificaci%C3%B3n_Base58Check)| 6| |[Curva elíptica](https://es.wikipedia.org/wiki/Curva_el%C3%ADptica)| 6| |[Curvas Elípticas en Bitcoin](https://repositorio.cetys.mx/bitstream/60000/253/1/CURVAS%20ELIPTICAS%20EN%20CRIPTOGRAFIA%20Y%20SU%20APLICACION%20EN%20BITCOIN.pdf)| 3| |[SHA-256](https://en.bitcoin.it/wiki/SHA-256) | 4| |[P2Pkh, P2Wpkh, P2H, P2Wsh](https://btctranscripts.com/scalingbitcoin/tokyo-2018/edgedevplusplus/p2pkh-p2wpkh-p2h-p2wsh/)| 25| ## Preguntas :::warning 🛑 Antes de resolver las preguntas del capítulo, revisa las instrucciones de trabajo de la sesión [aquí](https://hackmd.io/E5ZmWkcZRXi5K77gw0CVlg#Instrucciones-de-aprendizaje) ::: 1. What is a *Bitcoin address*, and how is it created? Is it the same as a *public key*? 2. What is a *one-way cryptographic function*, and how do we use it to derive *public keys*? 3. How do we know that the *discrete logarithm problem* is hard to break? 4. Bitcoin uses the *elliptic curve* over a finite field of *prime order*. What does that mean using common English terms? Why *prime order*? 5. Why is *Base58* used for address encoding instead of Base64? Would you do any modifications beyond *Base58*? 6. What is a *checksum*, and how is it used in Bitcoin addresses? 7. Why is *"compressed private key"* a misnomer? 8. What is the difference between *P2PKH* and *P2SH*? 9. How does Bitcoin use *Public-key cryptography* to control ownership of funds? 10. Bitcoin uses asymmetric cryptography, what does this refer to, how does it work? :::spoiler *En español* 1. ¿Qué es una *dirección de Bitcoin* y cómo se crea? ¿Es lo mismo que una *clave pública*? 2. ¿Qué es una *función criptográfica de una sola vía* y cómo se utiliza para obtener *claves públicas*? 3. ¿Cómo sabemos que el *problema del logaritmo discreto* es difícil de resolver? 4. Bitcoin utiliza la *curva elíptica* sobre un campo finito de *orden primo*. ¿Qué significa esto, en términos comunes? ¿Por qué el orden es primo? 5. ¿Por qué se utiliza *Base58* para la codificación de direcciones en lugar de Base64? ¿Harías alguna modificación más allá de *Base58*? 6. ¿Qué es un *"checksum"* y cómo se usa en las direcciones de Bitcoin? 7. ¿Por qué *"clave privada comprimida"* es un nombre inapropiado? 8. ¿Cuál es la diferencia entre P2PKH y P2SH? 9. Cómo se utiliza la *criptografía de clave pública* para controlar la propiedad de los fondos en Bitcoin 10. Bitcoin utiliza criptografía asimétrica, ¿a qué se refiere esto?, ¿cómo funciona? ::: ## Ejercicios :::info Run the following exercises on the command line: - For Linux: ```sass echo -n "Seminario de Mastering Bitcoin" | sha256sum echo -n "Mastering Bitcoin" | sha256sum ``` - For macOS: ```sass echo -n "Seminario de Mastering Bitcoin" | openssl sha256 echo -n "Mastering Bitcoin" | openssl sha256 ``` - Analyze the outputs and explain what happens. ::: :::spoiler *En español* :::info Ejecutar los siguientes ejercicios en línea de comandos: - Para Linux ```sass echo -n "Seminario de Mastering Bitcoin" | sha256sum echo -n "Mastering Bitcoin" | sha256sum ``` - Para macOS: ```sass echo -n "Seminario de Mastering Bitcoin" | openssl sha256 echo -n "Mastering Bitcoin" | openssl sha256 ``` - Analizar las salidas y explicar lo que sucede.