Guardar el secreto del dispositivo en una tarjeta SD: ¿mala idea o aceptable?
Traducido del English por IA ·
Proyecto de fin de carrera, ESP32-WROOM + módulo microSD, envía lecturas de un invernadero a Hermetry por MQTT/TLS. Funciona.Mi tutor preguntó por qué el token está compilado en el firmware y sugirió mover todas las «cosas de seguridad» (token, bundle de CA, credenciales WiFi) a un archivo en la tarjeta SD para que el mismo binario pueda ir en cada placa y yo solo cambie las tarjetas. Suena práctico. Pero luego un amigo dijo que guardar secretos en almacenamiento extraíble es de lo peor que se puede hacer.También leí que Hermetry admite certificados de cliente X.509 y estaba pensando en usar ese camino y guardar también el certificado y la clave en la tarjeta. Así que en realidad son dos preguntas:
- ¿Es realmente malo guardar credenciales en memoria externa, y por qué?
- ¿Puedo usar mi propio certificado X.509 con Hermetry?
Quiero entender el razonamiento, no solo un «no lo hagas», porque tengo que explicarlo en el informe.
Final year project, ESP32-WROOM + microSD module, sends readings from a greenhouse to Hermetry over MQTT/TLS. Works.
My supervisor asked why the token is compiled into the firmware and suggested I move all the «security stuff» (token, CA bundle, WiFi credentials) to a file on the SD card so the same binary can go on every board and I just swap cards. Sounds neat. But then a friend said that keeping secrets on removable storage is about the worst thing you can do.
I also read that Hermetry supports X.509 client certs and I was thinking of going that way and keeping the cert and key on the card too. So two questions really:
- is it actually bad to keep credentials on external memory, and why
- can I use my own X.509 cert with Hermetry?
I’d like to understand the reasoning, not just «don’t», because I need to write it up in the report.
Traducido del English por IA ·
Tu amigo tiene razón en general. Cualquiera que tenga 10 segundos a solas en el invernadero se marcha con la tarjeta y con la identidad de tu dispositivo.
Your friend is right in general. Anyone with 10 seconds alone in the greenhouse walks away with the card and your device’s identity.
Traducido del English por IA ·
Pero si está en la flash, también pueden leer la flash, ¿no? Sinceramente, no veo la diferencia.
But if it’s in flash they can read the flash too, no? I don’t see the difference honestly.
Traducido del English por IA ·
La diferencia está en el esfuerzo. Sacar una tarjeta no requiere ninguna habilidad. Volcar la memoria flash también es fácil en un ESP32, a menos que el cifrado de flash esté activado. Con cifrado de flash + cifrado de NVS, un volcado solo da datos ilegibles.
Difference is effort. Pulling a card is zero skill. Dumping flash is easy on an ESP32 too, unless flash encryption is on. With flash encryption + NVS encryption, a dump gives you garbage.
Traducido del English por IA ·
El año pasado revisé un diseño similar para un contratista, así que aquí está el razonamiento para el informe.Separa lo público de lo secreto. El paquete CA es público; el certificado del servidor es público y se verifica con un paquete CA normal, por lo que guardarlo en la tarjeta no es problema. La contraseña de WiFi y el token del dispositivo son secretos, ya que identifican exactamente a este dispositivo.Los secretos en medios extraíbles fallan por dos motivos: quitar la tarjeta no deja ningún rastro, y la tarjeta suele copiarse en otras placas («clona la tarjeta sin más»), así que varios dispositivos comparten una misma credencial. Hermetry permite una sola sesión por dispositivo; dos placas con el mismo token se expulsarían constantemente entre sí, y verías una toma de control en la pestaña Log del dispositivo.Sobre X.509: para tus propias placas no está disponible. Los certificados de cliente deben provenir de la autoridad de certificación de dispositivos de Hermetry, y no se ofrece subir tu propia CA para dispositivos de terceros; esa vía es para dispositivos licenciados que generan su clave y envían ellos mismos una CSR. Tu ESP32 usa un token de acceso o MQTT basic.Lo que haría en un ESP32:1. El mismo binario para cada placa es aceptable. Guarda el token en NVS durante el aprovisionamiento (un pequeño comando serie en el primer arranque), no en la tarjeta.2. Activa el cifrado de flash y el cifrado de NVS, para que un volcado de la flash no revele el token.3. La tarjeta solo para el registro de datos y el paquete CA.4. En Hermetry, un dispositivo y un token por placa; rota el secreto si una placa se pierde. Eso termina sus sesiones de inmediato.La limitación de certificados está en la última sección de Device certificates.
Did a review of a similar design for a contractor last year, so here’s the reasoning for the report.
Separate public stuff from secret stuff. The CA bundle is public; the server certificate is a public one and you verify it with a normal CA bundle, so keeping that on the card is fine. WiFi password and the device token are secrets, they identify this exact device.
Secrets on removable media fail on two counts: removing them leaves no trace, and the card usually gets copied into other boards («just clone the card»), and then you have several devices sharing one credential. Hermetry allows one session per device, so two boards with the same token keep kicking each other off, and you’d see takeover in the device’s Log tab.
On X.509: for your own boards it’s not available. Client certificates must come from Hermetry’s device certificate authority, and uploading your own CA for third-party devices is not offered; that path is for licensed devices that generate their key and send a CSR themselves. Your ESP32 uses an access token or MQTT basic.
What I’d do on an ESP32:
1. Same binary for every board is fine. Put the token in NVS at provisioning (a small serial command on first boot), not on the card.
2. Turn on flash encryption and NVS encryption, so a flash dump does not give up the token.
3. Card only for data logging and the CA bundle.
4. In Hermetry, one device and one token per board; rotate the secret if a board goes missing. That ends its sessions at once.
The certificate limitation is on Device certificates, last section.
Traducido del English por IA ·
Muy útil, gracias. El supervisor aceptó «CA pública en la tarjeta, secretos en NVS cifrada». La parte de X.509 me ahorró una semana; ya había empezado a generar una CA con openssl. Curiosamente, la semana pasada cloné la tarjeta para una segunda placa y los datos estaban incompletos; era exactamente el problema de la toma de control.
Really helpful, thank you. Supervisor accepted «public CA on card, secrets in encrypted NVS». The X.509 bit saved me a week, I had already started generating a CA with openssl. Funny enough I had cloned the card for a second board last week and the data was patchy, it was exactly the takeover thing.
Traducido del English por IA ·
vale, el planteamiento de «cero conocimientos frente a algunos conocimientos» tiene sentido, gracias.
ok the «zero skill vs some skill» framing makes sense, thanks.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

