01 · Especificación
Código 1010 o nada
DIP de 4 con pull-down, código secreto 1010: verde si coincide exacto, rojo si no. Sin micro, sin clock, sin debounce (switches fijos no rebotan en régimen). Dos chips: HC04 + HC21.
- ¿Qué ecuación abre?
- ¿Por qué AND+NOT y no XNOR?
- ¿Qué BOM lleva?
- ¿En qué orden se prueba?
02 · Diseño
Igualdad abaratada
Comparar contra constante no necesita XNOR: el bit que debe ser 1 entra directo, el que debe ser 0 entra negado: E = S3·~S2·S1·~S0 (1 AND-4 + 2 NOT). Rojo = ~E con otro NOT: si algo falla, queda en rojo.
03 · BOM
Lista de compras
| Ítem | Detalle |
|---|---|
| DIP-4 + R 10k ×4 | Switches a Vcc con pull-down |
| 74HC21 | Doble AND-4 (usamos una) |
| 74HC04 | 3 NOT (2 + rojo) |
| LED verde/rojo + R 1k ×2 | Veredicto visible |
| 5 V + 100 nF ×2 | Fuente y desacople por chip |
Seguridad real: 4 bits = 16 intentos (juguete didáctico, no caja fuerte). La versión con código configurable usa 4 XNOR + AND (Tema 25).
04 · Puesta en marcha
Orden de pruebas
- 1. Rieles y reposo
- 5 V en pines 14, DIP en 0000: E = 0, rojo prendido. Si verde prende, revisar AND.
- 2. Cada switch
- Mover S0–S3 de a uno y medir el pin: 0/5 V francos. Pull-down que no tira = flotante.
- 3. Los 16 códigos
- Recorrer 0000–1111: solo 1010 da verde. Anotar: 1/16 abre.
- 4. Fail-closed
- Sacar un chip del zócalo: debe quedar en rojo. Lo seguro por defecto.
05 · Cerradura en código
Gemelo digital
Ecuación exacta más ataque de fuerza bruta (spoiler: 16 intentos).
Python en tu navegador. Atacá tu propia cerradura.
CODIGO = (1, 0, 1, 0)
def cerradura(s):
e = s[0] and (not s[1]) and s[2] and (not s[3])
print(f"{s} -> {'VERDE' if e else 'rojo'}")
return bool(e)
for intento in [(1, 0, 0, 0), (1, 1, 1, 1), (1, 0, 1, 0)]:
cerradura(intento)
1000 rojo, 1111 rojo, 1010 VERDE. ¿Qué bit falla en 1000?
Fuerza bruta
abren = [s for a in (0, 1) for b in (0, 1) for c in (0, 1) for d in (0, 1)
for s in [[a, b, c, d]] if cerradura(s)]
print(f"abren {len(abren)}/16: {abren}")
06 · Analogía programador
Allowlist en hardware
- 1Código fijo = allowlist.
Un solo valor permitido: como comparar contra secreto hasheado (pero sin hash).
- 2Fail-closed = deny default.
Rojo por defecto: como denegar por defecto en firewall. Seguro ante fallas.
- 34 bits = password de juguete.
16 intentos = sin seguridad: como PIN de 4… pero de verdad de 4. Demo, no producto.
07 · Exploración
Laboratorio: probar códigos
DIP virtual S3–S0 contra 1010: el laboratorio prende verde o rojo y cuenta intentos.
Cerradura 1010
1010 → VERDE ✓
1010: VERDE, abre.
Preguntas para explorar
- Probá 1000 y 1011. ¿E en cada uno? ¿Qué bit falla?
- ¿Cuántos de los 16 abren? ¿Qué implica para seguridad?
- Si S2 flota (sin pull), ¿qué puede pasar?
Ver respuestas sugeridas
- 1000: ~S2… S=1000: S3✓ ~S2✓ S1✗ → 0. 1011: S0✗ → 0. Un bit basta para cerrar.
- 1/16: fuerza bruta en segundos. Juguete didáctico, declarado.
- Lee 0 o 1 al azar (antena): la cerradura abre sola a veces. Pull-down siempre.
08 · Comprensión
Confusiones frecuentes
«XNOR para todo»
Contra constante, AND+NOT usa menos puertas que 4 XNOR + AND: optimizar para el caso, no para el dogma.
«DIP sin pull»
Abierto = flotante = aleatorio: pull-down 10k por switch. Sin excepción.
«LED sin R»
1k a 5 V (3 mA, visible): sin R quemás LED o puerta. Siempre R.
«Es segura»
16 combinaciones se prueban en 1 minuto: es demo de igualdad cableada, no seguridad.
09 · Práctica guiada
Ejercicios de cerradura
Ejercicio 1: otro código
Cambiá el secreto a 0110. ¿Ecuación? ¿Qué pines del HC21 usás? Verificá solo-ese con fuerza bruta.
Ver solución razonada
E = ~S3·S2·S1·~S0: NOTs en S3 y S0. Puerta AND-4 (pines 1,2,4,5→6 del HC21).
Ejercicio 2: código configurable
Segundo DIP como referencia + 4 XNOR + AND-4. ¿Puertas? ¿Ventaja?
Ver solución
4 XNOR + 1 AND-4 (HC86 + HC21): código cambiable sin recablear. Cuesta un chip más.
Ejercicio 3: ENTER con debounce
Botón ENTER que habilita E (E_final = E·ENTER). ¿Por qué RC+Schmitt? ¿Qué pasa sin él?
Ver solución
El botón rebota (Tema 11): sin debounce, el verde parpadea. RC 10k/1µF + HC14 antes del AND.
10 · Síntesis
Ideas para recordar
- E = S3·~S2·S1·~S0: igualdad contra constante.
- HC21 + HC04: 2 chips, fail-closed con ~E.
- DIP a Vcc + pull-down 10k; LED con 1k.
- Probar 16/16 + quitar chip (rojo).
- 4 bits = demo, no seguridad.
Primera cerradura andando. Ahora a calcular: en el próximo tema, calculadora de 4 bits.