home.social

#encriptacion — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #encriptacion, aggregated by home.social.

  1. YellowKey: zero-day que con acceso físico salta BitLocker por defecto en Windows 11 y da acceso al disco cifrado en segundos mediante USB y recuperación. aidoo.news/noticia/W00aBZ

    #Ciberseguridad #ZeroDay #Microsoft #Encriptacion #IT

  2. Signal amenaza con abandonar Canadá por el proyecto de ley C-22

    Udbhav Tiwari, vicepresidente de estrategia y asuntos globales de Signal, advirtió que la empresa podría retirarse de Canadá si se le exige cumplir con el proyecto de ley C-22, conocido como la ley de «acceso legal». Afirmó que Signal «preferiría salir del país» antes que comprometer las promesas de privacidad que ha hecho a sus usuarios (The Globe and Mail).


    Tiwari también advirtió que los cambios técnicos que exige la ley podrían dejar servicios de mensajería como Signal vulnerables a ciberataques, permitiendo potencialmente que hackers o adversarios extranjeros exploten las vulnerabilidades creadas deliberadamente.


    ¿Qué hace exactamente el proyecto de ley C-22?
    La ley obligaría a empresas de telecomunicaciones, compañías de internet y otros proveedores de servicios electrónicos a modificar sus sistemas para permitir que la policía y el Servicio Canadiense de Inteligencia de Seguridad utilicen capacidades de vigilancia para detectar amenazas y actividad criminal.


    Tiene dos componentes principales:
    Uno exige que los «proveedores principales» conserven metadatos hasta por un año — no correos ni mensajes de texto, sino información como qué números de teléfono han estado en contacto entre sí y datos que podrían ubicar geográficamente a una persona.


    La parte más polémica permitiría al gobierno federal ordenar en secreto a las empresas que debiliten el cifrado o creen puertas traseras para acceder a información — lo que debilitaría el cifrado en general y crearía nuevas vulnerabilidades explotables por delincuentes.


    Signal no está sola. Apple también ha expresado su preocupación y declaró que «jamás» añadirá una puerta trasera a su cifrado de extremo a extremo, advirtiendo que podría no poder ofrecer ciertas funciones en Canadá como resultado.

    #accesolegal #APPLE #billc22 #canada #ciberseguridad #cifrado #encriptacion #internet #mensajeria #PORTADA #privacidad #señal #SEGURIDAD #tecnologia #telecomunicaciones #Vigilancia
  3. Discret 11 y su Impacto en la Te…

    El sistema **Discret 11** fue un innovador método de encriptación desarrollado en Francia durante los años 80, diseñado específicamente para proteger las transmisiones de televisión.

    norvik.tech/news/analisis-disc

    #Technology #Discret11 #Encriptacion #TecnologiaDeBroadcast #HistoriaDeLaTecnologia #NorvikTech #DesarrolloSoftware #TechInnovation

  4. Gmail despliega cifrado de extremo a extremo: solo emisor y receptor leen el correo. Ya funciona en Android, iOS y web (incluso si el destinatario no usa la app). aidoo.news/noticia/rqmv9a

    #Privacidad #Encriptacion #CorreoElectronico #Google #SeguridadDigital

  5. 6 of 10

    It's all automatic. Message Management: The modern system is designed for instant messaging. Messages are delivered and deleted from the server immediately after download. This solves the old problem of "email staying on the server," making the experience less secure and identical to Signal or Telegram, but with the fundamental difference that it uses the open MIME standard. Security and Servers: Since the app now handles account creation anonymously, you aren't giving your number or personal email to anyone. 100% Open Source, European, German, and now offers truly anonymous and simple registration.

    #THREEMA 🇨🇭💼

    The strength: Reliability and European Compliance. Threema is the standard for those who want security without too much technical thought, widely used by administrations and doctors in Germany and Switzerland. How it works: Uses an anonymous ID (a string of numbers and letters).

    6 of 10 ⤵️

    #Verschlüsselung #Encriptación #Decentralization #Decentralizzazione

  6. 4 of 10
    ...messages are encrypted during sending and are decoded by the other phone which has the key to read it; anyone intercepting the message intercepts an incomprehensible message that can only be deciphered by the recipient's mobile phone and no one else. Security: Offers very high metadata protection compared to standard apps.The compromise: Being so focused on privacy, the user experience can be less fluid than #WhatsApp.You have to save your contacts via long code strings or QR codes, and there isn't an "integrated address book" that automatically downloads contacts from your SIM.

    #SIMPLEX 🇬🇧

    The strength: "No Metadata" Architecture. SimpleX has a unique and revolutionary approach. How it works: Unlike almost all other apps, SimpleX does not use a permanent "user identifier" like a phone number or a fixed username on their servers; instead, it uses temporary addresses for each connection.

    4 of 10 ⤵️

    #Crittografia #Encryptie #Verschlüsselung #Encriptación #Decentralization

  7. 2 of 10

    🎖️ #THREEMA 🇨🇭
    Very popular in Germany
    Uses an anonymous 8-digit Threema ID. Proprietary code (but audited).
    Threema is used extensively by Swiss and German doctors and military due to the app's military-grade security. One-time payment of €5. @threemaap

    🐐 #ELEMENT X - #MATRIX 🇬🇧
    Federated. Communicates with anyone using the Matrix protocol (you can write to anyone with a Matrix address even if they use a different app than yours = bridge). A bit complex for the general public; some have concerns about the security of bridges. Much loved by geeks, activist groups, and journalists who need to maintain an invisible but online profile.FREE&100% Open Source. @matrix
    @element

    2 of 10 ⤵️

    #Encryption #Crittografia #Encryptie #Verschlüsselung #Encriptación #Decentralization #Decentralizzazione #Gedecentraliseerd

  8. #CryptoParty | Esta mesa se enfoca en el uso de VeraCrypt, una herramienta de software libre, para cifrar discos y resguardas la información sensible.

    Esta mesa estará guiada por La Libre Tecnologías Comunitarias.

    #cuidadosdigitales #cifrado #encriptacion #seguridadinformatica

  9. Datos encriptados con llave publica PGP

    En estos días de APIs e integraciones entre empresas la seguridad de los datos ya se empieza a tomar en serio, por lo que no es extraño que le soliciten encripte los datos antes de enviarlos.

    Uno de los métodos de encriptados mas comúnmente usados con esos fines es la encriptación asimétrica vía una llave publica PGP/GPG, así que veamos como se hace.

    Llave publica PGP / GPG

    La encriptación asimétrica funciona de la siguiente manera, nosotros tenemos dos llaves diferentes, una que solo sirve para encriptar, la llave publica y una que solo sirve para desencriptar, la llave privada.

    La llave publica la distribuimos con toda la gente de la que planeemos recibir información y con esta pueden generar un mensaje que solo puede ser descifrado con la llave privada.

    La llave privada no la compartimos fuera de la organización y con esta podemos descifrar los mensajes encriptados con la llave publica.

    Las llaves no son intercambiables la llave privada no sirve para generar mensajes y la llave publica no puede desencriptarlos por lo que debe ser cuidadoso en como maneja estos dos archivos.

    Las llaves son manejadas por varios programas siendo los mas comunes, y los que le dan el nombre que usamos en esta entrada, el Pretty Good Privacy o PGP y el GNU Privacity Guard o GPG ambos son compatibles entre si y esas llaves funcionaran con el ejemplo que veremos a continuación.

    Bouncy Castle

    El framework mas popular y completo para encriptación en Java es Bouncy Castle y lo usaremos para

    Dado que este framework cubre muchos métodos de encriptación esta dividido en múltiples módulos, para lo que necesitamos usaremos dos, el modulo bcpkix y bcpg los cuales puede encontrar en el repositorio de Maven en los siguientes enlaces:

    Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs

    Bouncy Castle OpenPGP API

    Detalle muy importante, Bouncy Castle es MUY dependiente de la versión del Kit de Desarrollo Java (JDK) que este utilizando y por tanto de la versión de la maquina virtual donde lo desea correr, estos enlaces son para el Java 18, si va a utilizar otra versión busque en Maven las versiones con versión JDK que planea usar y utilice esos, de otro modo es posible vea errores extraños al ejecutar su programa.

    Si esta utilizando NetBeans le recomiendo agregue ambos módulos desde el dialogo de agregar dependencias al proyecto, ya que se ese se encargara de buscar la versión adecuada según la plataforma Java que halla configurado en su proyecto.

    Crear una llave publica GPG / PGP

    Si apenas esta agregando el encriptado a su programa lo mas posible es que no tenga una llave publica para realizar pruebas, en ese caso le recomiendo genere una para pruebas con ayuda de este muy útil sitio:

    https://pgpkeygen.com/

    pgpkeygen.com, utileria web para generar llaves GPG / PGP

    Su uso es sencillo, solo llene la información, presione «Generate Keys» y después de unos momentos tendrá el par de llaves la publica y privada, las cuales podrá descargar con el botón correspondiente, para nuestro ejemplo solo requeriremos de la llave publica.

    Usando ese sitio se crearon las llaves usadas en este ejemplo, las cuales se incluyen como los archivos llave.gpg que contiene la llave publica y llavePrivada.gpg que contiene la llave privada.

    Notara que uno de los campos en la utilería es PassPhrase, esta es la contraseña de la llave privada, la cual distingue entre mayúsculas y minúsculas y es necesaria para descifrar el mensaje, no hay forma de recuperarla desde las llaves así que asegúrese de no perderla.

    La contraseña de la llave privada del ejemplo es hashHash téngalo en mente ya que usaremos esto al final del ejemplo.

    Ejemplo

    El proceso para aplicar la encartación es el siguiente:

    1. Cargar la llave publica desde su archivo a un InputFileStream
    2. Inicializar Bouncy Castle
    3. Convertir el mensaje que deseamos encriptar a un arreglo de bytes
    4. Obtener el tamaño de ese arreglo de bytes
    5. Convertir el arreglo de bytes a un ByteArrayInputStream
    6. Crear un OutputStream para almacenar el resultado
    7. Crear el objeto compresor de datos
    8. Crear la configuración del encriptador
    9. Crear el encriptador
    10. Convertir el Stream de la llave publica a PGPPublicKey
    11. Creamos el método de encriptado JcePublicKeyKeyEncryptionMethodGenerator
    12. Agregamos ese método al encriptador
    13. Si se usara la armadura convertirmos el Stream de salida en ArmoredOutputStream
    14. Aplicamos la encriptacion
    15. Convertidos los datos encriptados a un outputStream con PGPLiteralDataGenerator
    16. Convertimos el OutputStream a un arreglo de bytes
    17. Convertimos el arreglo de bytes a String
    18. Mostramos en pantalla

    Notara que los datos a encriptar, la llave publica y los datos encriptados se manejan como Streams de diversos tipos, esto es por requerimientos de Bouncy Castle

    Ahora veamos el código, para este ejemplo se usan dos clases, App que es la clase principal y EncriptadorDAO que efectúa el grueso del proceso, las lineas estan comentadas para hacer fácil seguir lo que hacen.

    App.java

    package mx.hash.encriptado;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import org.bouncycastle.openpgp.PGPException;public class App {    static private final Logger LOGGER = Logger.getLogger("mx.hash.encriptado.App");    public static void main(String[] args) {        FileInputStream streamLlavePublica = null;        try {            File llavePublica = new File("llave.gpg");            streamLlavePublica = new FileInputStream(llavePublica);                        EncriptadorDAO encriptadorDAO = new EncriptadorDAO();                        encriptadorDAO.inicializarBouncyCastle();                        String texto = "HOLA-MUNDO";                        byte[] datos = texto.getBytes();            ByteArrayInputStream datosStream = new ByteArrayInputStream(datos);            Integer longitudDatos = datos.length;                                    ByteArrayOutputStream salidaStream = new ByteArrayOutputStream();                        encriptadorDAO.encriptar(salidaStream, datosStream, longitudDatos, streamLlavePublica);                        byte[] datosEncriptados = salidaStream.toByteArray();                        String resultado = new String(datosEncriptados);                        LOGGER.log(Level.INFO, resultado);                        streamLlavePublica.close();                    } catch (FileNotFoundException ex) {            LOGGER.log(Level.SEVERE, "Archivo llave no encontrado");            ex.printStackTrace();                    } catch (IOException | PGPException ex) {            LOGGER.log(Level.SEVERE, "Error de entrada/salida");            ex.printStackTrace();        }             }}

    EncriptadorDAO.java

    /* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */package mx.hash.encriptado;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.security.SecureRandom;import java.security.Security;import java.time.LocalDateTime;import java.time.ZoneOffset;import java.util.Arrays;import java.util.Date;import java.util.Iterator;import java.util.Optional;import java.util.logging.Level;import java.util.logging.Logger;import org.bouncycastle.bcpg.ArmoredOutputStream;import org.bouncycastle.bcpg.CompressionAlgorithmTags;import org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.bouncycastle.openpgp.PGPCompressedDataGenerator;import org.bouncycastle.openpgp.PGPEncryptedDataGenerator;import org.bouncycastle.openpgp.PGPException;import org.bouncycastle.openpgp.PGPLiteralData;import org.bouncycastle.openpgp.PGPLiteralDataGenerator;import org.bouncycastle.openpgp.PGPPublicKey;import org.bouncycastle.openpgp.PGPPublicKeyRing;import org.bouncycastle.openpgp.PGPPublicKeyRingCollection;import org.bouncycastle.openpgp.PGPUtil;import org.bouncycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator;import org.bouncycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder;import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator;/** * * @author david */public class EncriptadorDAO {    static private final Logger LOGGER = Logger.getLogger("mx.hash.encriptado.EncriptadorDAO");    private final int algoritmoCompresion = CompressionAlgorithmTags.ZIP;    private final int algoritmoLlaveSimetrica = SymmetricKeyAlgorithmTags.AES_128;    private final boolean armadura = true;    private final boolean chequeoIntegridad = true;    private final int bufferSize = 1 << 16;    public void inicializarBouncyCastle() {        LOGGER.log(Level.INFO, "Inicializando Bouncy Castle");                Security.addProvider(new BouncyCastleProvider());    }    public void encriptar(OutputStream encriptado, InputStream datosStream, long longitudDatos, InputStream llavePublicaStream) throws IOException, PGPException {        LOGGER.log(Level.INFO, "Encriptando datos");                // Compresor de datos        PGPCompressedDataGenerator compresor = new PGPCompressedDataGenerator(algoritmoCompresion);        // Objeto con las configuraciones para encriptacion        JcePGPDataEncryptorBuilder constructorPGP = new JcePGPDataEncryptorBuilder(algoritmoLlaveSimetrica);        constructorPGP.setWithIntegrityPacket(chequeoIntegridad);        constructorPGP.setSecureRandom(new SecureRandom());        constructorPGP.setProvider(BouncyCastleProvider.PROVIDER_NAME);        // Encriptador de datos        PGPEncryptedDataGenerator pgpEncryptedDataGenerator = new PGPEncryptedDataGenerator(constructorPGP);        // Objeto de la llave publica        PGPPublicKey llavePublica = obtenerLlavePublica(llavePublicaStream);                // Metodo de encriptado         JcePublicKeyKeyEncryptionMethodGenerator metodo = new JcePublicKeyKeyEncryptionMethodGenerator(llavePublica);                // Agregamos el metodo de encriptado deseado al encriptador        pgpEncryptedDataGenerator.addMethod(metodo);        // Si se esta usando la armadura generamos el Stream adecuado        if (armadura) {            encriptado = new ArmoredOutputStream(encriptado);        }        // Creamos el Stream con los datos encriptados        OutputStream cipherOutStream = pgpEncryptedDataGenerator.open(encriptado, new byte[bufferSize]);        // Generamos datos finales apartir del Stream de datos encriptados        generarDatos(compresor.open(cipherOutStream), datosStream, longitudDatos, bufferSize);                // Cerramos los streams        compresor.close();        cipherOutStream.close();        encriptado.close();    }        public PGPPublicKey obtenerLlavePublica(InputStream keyInputStream) throws IOException, PGPException {        LOGGER.log(Level.INFO, "Obteniendo llave Publica");                PGPPublicKeyRingCollection pgpPublicKeyRings = new PGPPublicKeyRingCollection( PGPUtil.getDecoderStream(keyInputStream), new JcaKeyFingerprintCalculator());                Iterator<PGPPublicKeyRing> keyRingIterator = pgpPublicKeyRings.getKeyRings();                while (keyRingIterator.hasNext()) {            PGPPublicKeyRing pgpPublicKeyRing = keyRingIterator.next();            Optional<PGPPublicKey> pgpPublicKey = extraerPGPKey(pgpPublicKeyRing);                        if (pgpPublicKey.isPresent()) {                return pgpPublicKey.get();            }        }                throw new PGPException("Llave publica invalida");    }    public Optional<PGPPublicKey> extraerPGPKey(PGPPublicKeyRing pgpPublicKeyRing) {        LOGGER.log(Level.INFO, "Extrayendo llave PGP");                for (PGPPublicKey publicKey : pgpPublicKeyRing) {            if (publicKey.isEncryptionKey()) {                return Optional.of(publicKey);            }        }        return Optional.empty();    }    public void generarDatos(OutputStream copia, InputStream datosOriginales, long longitudDatos, int bufferSize) throws IOException {        LOGGER.log(Level.INFO, "Generandos datos finales");                PGPLiteralDataGenerator literalDataGenerator = new PGPLiteralDataGenerator();                        OutputStream pOut = literalDataGenerator.open(copia, PGPLiteralData.BINARY, PGPLiteralData.CONSOLE, Date.from(LocalDateTime.now().toInstant(ZoneOffset.UTC)), new byte[bufferSize]);                byte[] buffer = new byte[bufferSize];                try {            int len;            long totalBytesWritten = 0L;                        while (totalBytesWritten <= longitudDatos && (len = datosOriginales.read(buffer)) > 0) {                pOut.write(buffer, 0, len);                totalBytesWritten += len;            }                        pOut.close();        } finally {            // Clearing buffer            Arrays.fill(buffer, (byte) 0);            // Closing inputstream            datosOriginales.close();        }    }}

    Bastante mas código de lo que tal vez esperaba, ¿No? Esto es mas que nada por la necesidad de un par de funciones conversoras de formatos relacionadas con la estructura interna de una llave publica, algo que no ocupamos mover por el momento.

    Si recuerda del proceso listado a principio de esta sección los pasos del 7 al 14 ocurren en la función EncriptadorDAO.encriptar.

    Ya que corra el programa obtendrá una salida similar a esta, la encriptación usa la fecha y hora del sistema como uno de los parámetros así que no le extrañe si cada vez que corra el programa obtiene una salida diferente.

    Salida del programa

    Donde lo que esta entre —–BEGIN PGP MESSAGE—– y —–END PGP MESSAGE—– es nuestro mensaje encriptado

    -----BEGIN PGP MESSAGE-----Version: BCPG v1.70hQEMAwOZTa/i2J0tAQf/YhzovUXVdSxFAeQNkWrBFnVx32wa6P2o+dqrlGSAxXs1XIsFxgbu/9ZXv2OTbHGj3X/TblRbw4+tnAqkrYyjwnzfhC1eqgcel4uT/mqsmNKh5JOstOQENDvHzd8G6yvFEUAXA+UJDOhudME5vxtj6yV8VNWgimqCXBFkU2Yd47KutI1W+2nrtjliYPbZybhBCdi0lN9w9HSCoNZY9CBN8OGSq1G7ukIT89X8r0p0pOzI2RwsLt1/7GZRGgrU7VZNumaxxxFah3ETjlOAOPNyN/O0IO+a7fWsMbTldGv0c1jD43i+uArhWehaFcDMPbDwDb9NkvbKCHSzsCZJayfzqdJHAfDbfiih0Iz2U+w0PEPJlVKymUuIJwYdc2gSr0QOeWwV8vI9LGCmQMzSkj37WtZ9ZdBK0BJxbDyBaAhfRmKmZSnW1R7SwdU==q8RV-----END PGP MESSAGE-----

    Verificando salida del programa

    Y seguramente se preguntara, ¿Hay alguna forma de validar que todo saliera bien?, claro que la hay, ya que tenemos la llave privada y la contraseña de la misma podemos ir a cualquier aplicación que descifre PGP / GPG y descifrar el mensaje.

    Para este ejemplo suguiero https://pgptool.org/ en especifico la pestaña Decrypt (+Verify)

    Decrypt (+Verify) de PGP Tool

    En «Receiver’s Private Key (For decryption purpose)» cargaremos la llave privada del ejemplo (llavePrivada.gpg) , pondremos la contraseña de la llave privada en «Passphrase for private key» y copiaremos TODO el mensaje encriptado (incluso los guiones) al cuadro de texto «Encrypted PGP Message»

    Datos ingresados

    Ya que tenga todos los datos en si lugar presione «Decrypt the message»

    Mensaje descifrado

    Y obtendrá el mensaje que encriptamos HOLA-MUNDO.

    Con esto podemos estar seguros que la encriptación se aplico correctamente, ya que una aplicación adicional fue capaz de descifrar el mensaje.

    Notara que aparece un mensaje amarillo que dice «Decrypted, but incorrect fingerprint – signature not verified. If this message encrypted without signature – ignore this message.» esto se debe a que no aplicamos una firma a la encriptación, esto es un proceso adicional que por el momento no requerimos.

    Si desea el código completo de este ejemplo puede encontrarlo aquí:

    https://gitlab.com/ticomWebcomic/encriptadopgp

    Espero que esta entrada le fuera de utilidad, nos vemos en la próxima y si desea cooperar con la causa.

    https://hashblogeando.wordpress.com/2024/07/02/encriptar-con-una-llave-publica-pgp-gpg-en-java/

    #encriptacion #java

  10. No todo está cifrado de un extremo a otro en las aplicaciones cifradas de un extremo a otro.

    Aquí hay una hoja de trucos 😃 sobre qué información está cifrada en cinco aplicaciones de chat, cuál no y por qué son importantes los matices.

    | #privacidad #encriptación #cyberseguridad

    washingtonpost.com/technology/