diff --git a/.env-sample b/.env-sample index c6428c8f..ad32919b 100644 --- a/.env-sample +++ b/.env-sample @@ -56,8 +56,8 @@ FEE = 0.002 MAKER_FEE_SPLIT=0.125 # Bond size as percentage (%) -DEFAULT_BOND_SIZE = 1 -MIN_BOND_SIZE = 1 +DEFAULT_BOND_SIZE = 3 +MIN_BOND_SIZE = 2 MAX_BOND_SIZE = 15 # Time out penalty for canceling takers in SECONDS diff --git a/api/logics.py b/api/logics.py index 3115a37a..12421be5 100644 --- a/api/logics.py +++ b/api/logics.py @@ -1,4 +1,5 @@ from datetime import timedelta +from tkinter import N from django.utils import timezone from api.lightning.node import LNNode from django.db.models import Q @@ -98,35 +99,42 @@ class Logics: enc_priv_key = enc_priv_key.replace('\r\n', '\n') pub_key = pub_key.replace('\r\n', '\n') - # Try to import and export the public key (without passphrase) - try: - import_pub_result = gpg.import_keys(pub_key) - pub_key = gpg.export_keys(import_pub_result.fingerprints[0]) - except Exception as e: - e = "Your system time might be in the future " if str(e)=="list index out of range" else str(e) + # Try to import the public key + import_pub_result = gpg.import_keys(pub_key) + if not import_pub_result.imported == 1: return ( False, { "bad_request": - f"Your PGP public key does not seem valid. Error: {str(e)}" + f"Your PGP public key does not seem valid.\n"+ + f"Stderr: {str(import_pub_result.stderr)}\n"+ + f"ReturnCode: {str(import_pub_result.returncode)}\n"+ + f"Summary: {str(import_pub_result.summary)}\n"+ + f"Results: {str(import_pub_result.results)}\n"+ + f"Imported: {str(import_pub_result.imported)}\n" }, None, None) + # Exports the public key again for uniform formatting. + pub_key = gpg.export_keys(import_pub_result.fingerprints[0]) # Try to import the encrypted private key (without passphrase) - try: - import_priv_result = gpg.import_keys(enc_priv_key) - except Exception as e: + import_priv_result = gpg.import_keys(enc_priv_key) + if not import_priv_result.sec_imported == 1: return ( False, { "bad_request": - f"Your PGP private key does not seem valid. Exception: {str(e)}" + f"Your PGP encrypted private key does not seem valid.\n"+ + f"Stderr: {str(import_priv_result.stderr)}\n"+ + f"ReturnCode: {str(import_priv_result.returncode)}\n"+ + f"Summary: {str(import_priv_result.summary)}\n"+ + f"Results: {str(import_priv_result.results)}\n"+ + f"Sec Imported: {str(import_priv_result.sec_imported)}\n" }, None, None) - return True, None, pub_key, enc_priv_key @classmethod diff --git a/docs/_pages/tutorials/read/how-to-use.md b/docs/_pages/tutorials/read/how-to-use.md index cb41e3bd..1862ce5c 100644 --- a/docs/_pages/tutorials/read/how-to-use.md +++ b/docs/_pages/tutorials/read/how-to-use.md @@ -95,7 +95,7 @@ Every order has an expiration counter. By default, in RoboSats v0.1.0 new orders When you are decided for an order to take simply tap the "Take Order" button. You will see the contract box. Follow the contract box indications until you complete the trade! :) -First thing is to lock a small fidelity bond (just 1% of the trade amount), so the seller knows you can be trusted. The satoshis in this bond will just freeze in your wallet. If you try to cheat or cancel unilaterally, you will lose the satoshis locked in the bond. +First thing is to lock a small fidelity bond (just 3% of the trade amount by default), so the seller knows you can be trusted. The satoshis in this bond will just freeze in your wallet. If you try to cheat or cancel unilaterally, you will lose the satoshis locked in the bond.
diff --git a/docs/_pages/tutorials/read/how-to-use_de.md b/docs/_pages/tutorials/read/how-to-use_de.md index 2bd81ae6..043369c7 100644 --- a/docs/_pages/tutorials/read/how-to-use_de.md +++ b/docs/_pages/tutorials/read/how-to-use_de.md @@ -97,7 +97,7 @@ Jedes Angebot hat einen Verfallszähler. In RoboSats v0.1.0 bleiben neue Angebot Wenn du dich für ein Angebot entschieden hast, tippe einfach auf die Schaltfläche "Take Order". Du siehst dann die Kontraktbox. Folge den Anweisungen der Kontraktbox, bis du den Handel abgeschlossen hast! :) -Als erstes musst du eine kleine Kaution hinterlegen (nur 1% des Handelsbetrags), damit der Verkäufer weiß, dass du vertrauenswürdig bist. Die Satoshis in dieser Kaution werden einfach in deiner Wallet eingefroren. Wenn du versuchst zu betrügen oder einseitig zu kündigen, verlierst du die in der Kaution enthaltenen Satoshis. +Als erstes musst du eine kleine Kaution hinterlegen (nur 3% des Handelsbetrags), damit der Verkäufer weiß, dass du vertrauenswürdig bist. Die Satoshis in dieser Kaution werden einfach in deiner Wallet eingefroren. Wenn du versuchst zu betrügen oder einseitig zu kündigen, verlierst du die in der Kaution enthaltenen Satoshis.
diff --git a/docs/_pages/tutorials/read/how-to-use_es.md b/docs/_pages/tutorials/read/how-to-use_es.md index a6465942..9c1db107 100644 --- a/docs/_pages/tutorials/read/how-to-use_es.md +++ b/docs/_pages/tutorials/read/how-to-use_es.md @@ -159,7 +159,7 @@ Al crear una orden, solo es requerido especificar la moneda, el tipo de orden (c
-Debes copiar o escanear la factura con tu billetera lightning para bloquear tu fianza de fidelidad como creador (1% del valor total de la transacción). Al bloquear esta fianza, los compradores perciben que eres de fiar y se comprometen a seguir con el intercambio. En tu billetera puede mostrarse como un pago en tránsito, congelarse o incluso aparentemente romper tu billetera. Siempre debes verificar en la web de RoboSats si el depósito ha sido bloqueado (¡tu billetera probablemente no te lo dirá! Comprueba la [lista de compatibilidad de billeteras](https://github.com/Reckless-Satoshi/robosats/issues/44)) +Debes copiar o escanear la factura con tu billetera lightning para bloquear tu fianza de fidelidad como creador (3% del valor total de la transacción por defecto). Al bloquear esta fianza, los compradores perciben que eres de fiar y se comprometen a seguir con el intercambio. En tu billetera puede mostrarse como un pago en tránsito, congelarse o incluso aparentemente romper tu billetera. Siempre debes verificar en la web de RoboSats si el depósito ha sido bloqueado (¡tu billetera probablemente no te lo dirá! Comprueba la [lista de compatibilidad de billeteras](https://github.com/Reckless-Satoshi/robosats/issues/44))
diff --git a/frontend/Dockerfile b/frontend/Dockerfile index c45b79ca..8544b6bc 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -18,4 +18,4 @@ RUN npm install # launch -CMD ["npm", "run", "dev"] \ No newline at end of file +CMD ["npm", "run", "build"] \ No newline at end of file diff --git a/frontend/src/components/MakerPage.js b/frontend/src/components/MakerPage.js index 8adb9a2f..497adaf9 100644 --- a/frontend/src/components/MakerPage.js +++ b/frontend/src/components/MakerPage.js @@ -52,7 +52,7 @@ class MakerPage extends Component { publicExpiryTime: new Date(0, 0, 0, 23, 59), escrowExpiryTime: new Date(0, 0, 0, 3, 0), enableAmountRange: false, - bondSize: 1, + bondSize: 3, limits: null, minAmount: "", maxAmount: "", @@ -655,12 +655,12 @@ class MakerPage extends Component { (x+'%')} step={0.25} - marks={[{value: 1,label: '1%'},{value: 5,label: '5%'},{value: 10,label: '10%'},{value: 15,label: '15%'}]} - min={1} + marks={[{value: 2,label: '2%'},{value: 5,label: '5%'},{value: 10,label: '10%'},{value: 15,label: '15%'}]} + min={2} max={15} onChange={(e) => this.setState({bondSize: e.target.value})} /> diff --git a/sensitive-data-PGP-guide_es.md b/sensitive-data-PGP-guide_es.md deleted file mode 100644 index 0d03a96c..00000000 --- a/sensitive-data-PGP-guide_es.md +++ /dev/null @@ -1,73 +0,0 @@ -# Cómo usar OpenKeychain para cifrar datos sensibles al usar RoboSats. - -## ¿Por qué es necesaria la encriptación? - -Dado que RoboSats funciona a través de la red Tor, todas las comunicaciones están cifradas de extremo a extremo. Esto ayuda a prevenir ataques de intermediarios que podrían leer o manipular datos durante su transmisión. Además, el protocolo Tor asegura que el usuario esté conectado al nombre de dominio en la barra de direcciones del navegador, en este caso la dirección Tor oficial de RoboSats (robosats6tkf3eva7x2voqso3a5wcorsnw34jveyxfqi2fu7oyheasid.onion). Sin embargo, en RoboSats v0.1.0, los datos se transfieren como texto sin formato a través del front-end (la interfaz de usuario) y el back-end (administración) de la aplicación. Esto podría hacer que los datos confidenciales como la información del pago en fiat (ARS, EUR, USD, …) puedan ser interceptados por un rastreador malicioso en el dispositivo de cualquiera de las partes o incluso en el servidor de RoboSats en la capa de abstracción de la aplicación. Esto supondría un ataque a la privacidad del titular de los datos. Incluso si el chat de RoboSats estuviera completamente encriptado en cada paso, no deberías confiar en que los datos confidenciales estén encriptados. La mejor práctica para evitar este problema es usar encriptación asimétrica durante el intercambio de datos confidenciales. Esta guía detalla un método que garantiza la confidencialidad de los datos personales utilizando el estándar PGP. - -## La aplicación OpenKeychain. - -OpenKeychain es una aplicación de Android de código abierto que permite crear y administrar pares de claves criptográficas y firmar y/o cifrar/descifrar texto y archivos. OpenKeychain se basa en el estándar OpenPGP que hace que el cifrado sea compatible en todos los dispositivos y sistemas. Puedes consultar una lista de software compatible para Windows, Mac OS y otros sistemas operativos, en este enlace: [openpgp.org/software/](openpgp.org/software/). Ya que el concepto es el mismo, este método se puede replicar utilizando cualquier otra aplicación. La aplicación OpenKeychain se puede encontrar en F-droid.org [[Link]](https://f-droid.org/packages/org.sufficientlysecure.keychain/) o en Google play store [[Link]](https://play.google.com/store/apps/details?id=org.sufficientlysecure.keychain) - -
- -
- -## Esquema de cifrado. - -En la mayoría de los casos, la información confidencial que queremos proteger es la información de pago en moneda fiat del vendedor, es decir: el número de teléfono, la cuenta de PayPal, etc. La imagen a continuación muestra el esquema de encriptación que garantiza que la información de pago del vendedor solo pueda ser leída por el comprador. - -
- -
- -El proceso de intercambio de datos se ha dividido en 3 sencillos pasos: - -- Creación de pares de claves por parte del comprador. - -- Compartir la clave pública del comprador con el vendedor. - -- Intercambio de datos encriptados. - -## Guía paso a paso. - -### Creación de pares de claves por parte del comprador. - -El primer paso para garantizar la confidencialidad de los datos es crear un par de claves pública/privada. A continuación se muestran los pasos para crear un par de claves en la aplicación OpenKeychain. Este procedimiento solo debe ser realizado por el comprador. Este paso solo se debe realizar una vez, no es necesario repetirlo cuando el comprador quiera volver a comprar, ya que en una futura operación ya tendrá el par de claves. - -
- -
- -
- -
- -### Compartir la clave pública del comprador con el vendedor. - -Ahora el comprador tiene dos claves: la clave privada sólo debe ser conocida por su propietario (en este caso concreto el comprador, que también la ha creado); la clave pública puede ser conocida por cualquier otra persona (el vendedor). El vendedor necesita la clave pública del comprador para cifrar los datos confidenciales, por lo que el comprador debe enviar el texto sin formato que representa la clave pública. Los pasos a continuación muestran cómo compartir el texto sin formato que representa la clave pública (imágenes 1-2), y también cómo el vendedor puede agregarla a su aplicación OpenKeychain para usarla más tarde (imágenes 3-8). - -
- -
- -
- -
- -La clave debe copiarse incluyendo el encabezado `(-----BEGIN PGP PUBLIC KEY BLOCK-----)` y el pie de página `(-----END PGP PUBLIC KEY BLOCK-----)` para el funcionamiento correcto de la aplicación. - -### Intercambio de datos encriptados. - -Una vez que el vendedor tiene la clave pública del comprador, se puede aplicar el esquema de cifrado que se muestra arriba. Los siguientes pasos describen el proceso de intercambio de datos cifrados. - -
- -
- -
- -
- -Los datos cifrados deben copiarse incluyendo el encabezado `(-----BEGIN PGP MESSAGE-----)` y el pie de página `(-----END PGP MESSAGE-----)` para el funcionamiento correcto de la aplicación. Si el comprador visualiza correctamente en la app los datos del vendedor significa que el intercambio ha sido exitoso y la confidencialidad de los datos está asegurada ya que la única clave que puede descifrarlos es la clave privada del comprador. - -Si quieres leer un tutorial sobre cómo usar OpenKeychain para uso general, consulta [As Easy as P,G,P](https://diverter.hostyourown.tools/as-easy-as-pgp/)