[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CYPHERPUNKS TO THE RESCUE
Matt Blaze describes a couple of possible attacks against the simple
one-way authenticating garage door opener. The attacks are basically the
ones that are often suggested against one-way login authentication
protocols. However, I think the garage door opener scenario is just
different enough that the attacks he describes can be ignored or
eliminated without overly complicating the devices.
(The following idea is a combination of ideas stolen from earlier posts.
plus a couple of new ones. Anyone following this thread should recognize
the earlier ideas and hopefully mentally credit the original posters.)
The transmission is one-way, from hand unit to base. There is no
encryption involved, no hash functions, no counter values to transmit, no
loosely synchronized clocks. The hand unit consists a transmitter, a
memory chip, a simple cpu chip, and some kind of jack or plug used to
initialize the unit.
Initialize the hand unit and base with identical sets of large random
numbers using a wall mounted panel. The random numbers will be arranged
in groups of, say, ten. I'll call each group a "family". Since memory is
cheap, load hundreds of families of random numbers.
Both the hand unit and the base will maintain an internal counter of the
"current family number". As numbers from a family are used, the "current
family number" is incremented. If the two "current family numbers" get
off, then the hand unit and base will have to be re-initialized.
To open the door, push the button on the hand unit (duh) to send the first
random number from the "current family". The base unit opens the door if
the received number is in the "current family" of random numbers. If the
door opens, the "current family number" counter in the base unit is
incremented and the remaining numbers in the previous "current family"
become invalid for opening. The "current family number" in the hand unit
automatically increments after about a minute from the time of the button
push.
If the first button push/transmission didn't get received, a second button
push (within a minute) will send another number from the same family,
activating the door. If the first transmission is successful, but the
driver continues to push the button, the subsequent transmissions are
useless to an interceptor/man-in-middle because the numbers transmitted
are from a family that has just become invalid for opening.
To close the door (within a minute of opening): pushing the button sends
another random number from the original family (i.e. the same family used
to open the door, now invalid for opening). Since the door is in the open
position, the base unit interprets the transmission as a request to close
the door. NOTE: the base unit ignores all button pushes while the door is
in the process of opening.
WRINKLE: If you wait more than a minute before trying to close the door,
the hand unit increments to the next family number. Therefore, when the
door is in the open position, the base unit will actually check the
received random number against both the previous "current family" and the
current "current family".
The major flaw I see in this scheme is that the "current family number" in
the hand unit may become off frequently due to accidental button pushes.
...
Now that I've gotten to the end of the description, I'm not so sure this
scheme is practical. I get the feeling that the delayed auto-increment of
the hand unit will create situations that violate the principle of "Least
Surprise". In other words, the hand unit may not always do what you
expect it to do.
Oh well, I'll post my description anyways in case it induces some better
ideas in others.
[email protected]