¿Cómo se podría implementar la protección contra escritura de hardware para medios flash?

Vengo de un entorno de software, pero siento que esta es una pregunta de hardware/electrónica.

Buscando una forma de protección contra escritura de hardware en medios flash, compré una tarjeta SDHC (con un pequeño interruptor etiquetado como "bloqueo") y un lector de tarjetas USB económico. Quería crear un dispositivo de "solo lectura" que pueda estar seguro de que no se modificará, sin tener que considerar el software en los hosts a los que lo conecto.

Insertada directamente en mi computadora portátil Dell, la tarjeta solo se puede escribir cuando está desbloqueada... Supuse que esto significaba que la tarjeta SD implementaba la protección contra escritura... Sin embargo, cuando coloco la tarjeta SD en el lector USB, ocurre lo mismo portátil me permite escribir en la tarjeta bloqueada. Ahora he leído esta pregunta y esta confirmación de que me equivoqué al suponer que el interruptor de 'bloqueo' proporcionaría protección contra escritura de hardware. Ahora sé que el 'bloqueo' no es una característica de la tarjeta de forma aislada, y que el 'bloqueo' estándar depende de los controladores del sistema operativo (en los que no quiero verme obligado a confiar).

Me gustaría saber: ¿Cuál sería una forma directa, simple, confiable, ordenada y económica de implementar un interruptor de protección contra escritura de hardware para medios flash? Idealmente, me gustaría acceder a este medio a través de USB. Supongo que necesitaré un dispositivo que pueda interceptar los bloques de datos intercambiados a través de la interfaz serial a USB o a la tarjeta SD.

Creo que esta pregunta está algo fuera de tema aquí, pero he visto a alguien que tenía una memoria USB con un interruptor RO/RW.

Respuestas (2)

Puede marcar la tarjeta SD como de solo lectura o protección temporal contra escritura. También puede ocultar el almacenamiento o proteger con contraseña para escribir.
Si no desea modificar el código o los controladores, puede construir una unidad externa para proteger rápidamente contra escritura sus tarjetas SD.
Vea aquí una implementación que usa un micro ATTiny85 externo como intermediario.

Deberías leer las especificaciones simplificadas

Encontrará una discusión general en la capa física 5.0. Puede marcar de forma permanente e irrevocable un área de almacenamiento como de solo lectura.

4.3.6 Gestión de protección contra escritura
La tarjeta de memoria SD admite tres métodos de protección contra escritura:
- Interruptor mecánico de protección contra escritura (responsabilidad del host únicamente)
- Protección contra escritura interna de la tarjeta (responsabilidad de la tarjeta)
- Operación de bloqueo de la tarjeta con protección de contraseña.

Password Card Lock parece ser la mejor opción para usted.

4.3.7 Operación de bloqueo/desbloqueo de tarjeta
La función de protección con contraseña permite que el host bloquee una tarjeta mientras proporciona una contraseña, que luego se usará para desbloquear la tarjeta. La contraseña y su tamaño se guardan en registros PWD de 128 bits y PWD_LEN de 8 bits, respectivamente. Estos registros no son volátiles, por lo que un ciclo de encendido no los borrará.

Tenga en cuenta (del discurso de Ali Chen) que no todas las tarjetas SD que compra tienen implementadas todas las características de la especificación. YMMV dependiendo de lo que compre. Si quisiera ser minucioso, enviaría un correo electrónico a Sandisk u otros y les preguntaría si admiten esta función.

Mira estos dos proyectos:

  1. http://www.seanet.com/~karllunt/sdlocker.html Esto le muestra cómo configurar PERM_WRITE_PROTECT... sin vuelta atrás... protegido contra escritura de forma permanente.
  2. http://www.seanet.com/~karllunt/sdlocker2.html Esto le muestra cómo configurar el bit TMP_Write_Protect y la protección de contraseña.

Samsung definitivamente admite PERM_WRITE_PROTECT como se muestra en sus especificaciones para el registro CSD. Lo muestra correctamente como (W)1... un valor de escritura única.

A partir de estos, debería poder encontrar una solución que satisfaga sus necesidades.

Jack, ¿no es cierto que toda la protección contra escritura interna de la tarjeta es "opcional" en las especificaciones, por lo que ningún fabricante la implementó en productos masivos? Las especificaciones de Samsung muestran este PERM_WRITE_PROTECT como "sin usar". Si pudiera publicar alguna herramienta SW para activar el PERM, retiraré mi "disertación".
@AliChen. Sandisk ciertamente lo apoya. De hecho, tienen un problema de servicio en el que ocasionalmente se configuran para los usuarios... bloqueando efectivamente sus tarjetas SD. La única opción es enviar la tarjeta SD a Sandisk para que la reemplacen. Estoy de acuerdo en que hay proveedores que no lo soportan. Pero el OP ciertamente puede encontrar aquellos que lo hacen.
Jack, encontré este tema de hace 5 años: superuser.com/a/354497/620011 Toshiba no implementa la gestión de WP. Estoy seguro de que muchos otros siguen. Por lo tanto, debe modificar su respuesta en consecuencia, con SanDisk, y señalar una herramienta que pueda hacer esto. Obviamente, este es un procedimiento no estándar y muchos lectores de tarjetas USB simplemente no admiten los comandos SD correspondientes.
Ali, ahora estamos en Rev 5.0 de la especificación. Y sí, como dije, algunos fabricantes no admiten funciones... algunos sí. Este tipo ( seanet.com/~karllunt/sdlocker.html ) mostró la viabilidad hace varios años. Todo lo que tiene que hacer el OP es obtener una tarjeta que admita PERM_WRITE_PROTECT y está listo para comenzar ... incluso si tiene que construir una pequeña herramienta para configurar el bit en CSD. No he visto ningún conjunto de herramientas para MAC/Windows/Linux, pero ciertamente ChibiOS tiene código para admitir las características: chibios.sourceforge.net/docs3/hal/group___m_m_c_s_d.html ...también hay código en TI MSP430 para hacer este.
Jack, incluso en Rev.5, la sección principal 4.3.6 establece que la "Protección interna contra escritura" es opcional. No entiendo su reticencia a mejorar su respuesta, para ampliar que no todas las tarjetas SD tienen esta función. Se supone que hay otra buena característica, FORCE_ERASE con la eliminación de la protección permanente contra escritura, por lo que el flash aún se puede reutilizar. ¿Dónde está? El tipo SD_locker usa TMP_WRITE_PROTECT, que se implementa en todas partes, para BLOQUEAR y DESBLOQUEAR, que no es lo que pide OP.
¡No me pediste que cambiara mi respuesta, Ali! Estoy feliz de hacerlo. El bit de protección contra escritura permanente está en CSD... el software para escribir/actualizar CSD es trivial. ¿No estoy seguro de entender cuál es tu problema?
ok, mi mala interpretación de "W(1)", que significa "escribible una vez". Estás en lo correcto. Entonces la ATP "microSD de grado industrial" también es compatible con esto. Por alguna razón, la opción WP es muy poco común y, trabajando con puentes de medios USB durante casi una década, no recuerdo esta pregunta nunca. Parece que la utilidad "diskpart" de Windows puede configurar fácilmente el volumen SD como "WP", consulte tenforums.com/tutorials/ ... Estoy eliminando mi respuesta demasiado complicada.
Gracias por esta fascinante respuesta. Es un enfoque elegantemente simple. El único inconveniente que puedo ver es que, si este bloqueo es irreversible (¿permanente?), No puedo reutilizar los medios. Si es reversible (¿temporal?), Debo asegurarme de que los dispositivos a los que conecto la tarjeta no puedan revertir la configuración. ¿Sería un enfoque 'puente' prohibitivamente complejo/caro/difícil?
La única forma en que podría pensar que podría lograr una solución temporal pero reversible es incluir dentro de su cargador de arranque (en la ruta de arranque de su sistema integrado) la contraseña para proteger con contraseña la tarjeta SDC. Luego, su sistema arranca, los descubridores bloquean los medios y luego proporcionan la contraseña para desbloquearlos... luego configura TMP_WRITE_PROTECT (aunque esto es suave) para tener esta sesión ahora de solo lectura. Si desconecta la alimentación del medio, estará protegido por contraseña cuando se vuelva a encender. Un poco complicado, lo sé, pero te permite poseer la contraseña de arranque como un secreto.
Dado que es el propietario del controlador para los medios, tiene permiso para establecer o borrar el estado temporal de solo lectura. Si permite conductores desprotegidos en su sistema, todas las apuestas están canceladas, por supuesto.
Mi situación real es un poco más complicada: quiero estar seguro de que mi medio flash permanece inalterado cuando lo conecto a un equipo que no tengo ni controlo, sin importar qué SO/controladores/software se esté ejecutando en él.
Entonces PERM_WRITE_PROTECT parece ser la estrategia correcta.

La respuesta más simple es encontrar un lector de tarjetas USB diferente, uno que implemente correctamente el bloqueo.

Parece que podría ver los lectores de tarjetas USB como simples dispositivos de transferencia. No lo son: el protocolo USB es completamente diferente de los protocolos de la tarjeta SD. Entonces ya hay un microcontrolador interceptando continuamente los bloques de datos. Solo necesita encontrar uno mejor que también verifique el bit de bloqueo.

Quizás, aunque mi comprensión de la respuesta a la pregunta de Melab fue que los controladores del sistema operativo implementan la protección contra escritura. Si el microcontrolador del lector de tarjetas USB implementara la protección contra escritura, eso funcionaría. ¿Cómo puedo establecer si el microcontrolador en sí, no el controlador del sistema operativo, está implementando la funcionalidad de protección contra escritura?