bionicbone / 433mhz_Rolling_Code

quichip Add Rolling Code Protection
GNU General Public License v3.0
12 stars 3 forks source link

Solution Methodology

The code is designed to be user configurable to add an element of uniqueness to each implementation which is a key part of the projects security. For example, a manufacture of a garage door has an implementation, hack one and you have hacked them all. Consider: The length of the list of random numbers can be decreased or increased (within memory limits), the amount of numbers sent each time between 2 and 10 is recommend (higher is more secure but more lag). The number of consecutive checks covers accidently presses on the Tx and allows the Rx to resync to the Tx position. The init-Value to be added once the list of Rolling Codes runs out. Even the Brute Force controls can be changed, here they are set so after 10 failed attempts the Rx Locks Out for 60 seconds, if repeated, 120, then 240 and 480 etc. A long press on the Tx button > 5 seconds a force a init-Value increament and restart of the new Rolling Code Loop (if activated), allowing emergancy resync of Tx to Rx and new numbers. User Configrable Settings

Rolling Code and Init-Value Example Rolling Code and Init-Value Example

Initial Release Video

https://www.youtube.com/watch?v=JLMbpiywVxQ

Updates on 2nd Jan 2024

All 4 Buttons are now added, could be an addition for equipment already using qaichip TX-118S-4 v2 & RX480E parts

code re-written, read "times out" if interference creeps in.

Updates on 5th Jan 2024

User configrable init-value added to the loop of rolling codes once they have all been consumed, thus only increaments after x codes consumed and invisible to hacker when this occurs or doesn't occur.

Rx "Lock Out" for ever increasing time when 10 (user configarable) false codes have been received.

Some documentaion has been added below.

Update Video

https://youtu.be/VihT618iKPA?si=CvWJA-HzKL6Me9dn

Updates on 10th Jan 2024

Add forced reset when button is pressed > 5 seconds, this applies the initValue to the rolling codes so they are not repeated and allows TX & Rx to resync at the begining of a new set of codes.

Updates on 14th Jan 2024

Add ESP32 Support
-required for Tx Deep Sleep ( coming soon... )
-required for Rx advanced feature ( coming soon... )
Add ATmega328P and ESP32 compile instructions
-around the debugging functions
-around pin setups
Add Tx Transmit LED on pinLED
Embed Tx ID onto first nibble of Rolling Code in Tx
Extract Tx ID rom first nibble of Rolling Code in Rx
Add Rx Tx Identification LEDs fro Tx0, Tx1, Tx2 ID
Share Rolling Codes for x number of attached Tx's
Perfect timing in high interferance environments (timing user configrable)
Tidied up some code - more to do
Tidied up debugging messages
Tested Perfect, no issues found

Mulit-Tx Update Video

https://youtu.be/CfMDaaJQzlc

RollJam Investigations Video
https://youtu.be/gohp3LFnj8Y

Decoding the QiaChip Signals Video
https://youtu.be/DBNdfk8Yu3U

PulseView of Timing

The correct connection method when using a logic analyzer is at both Nano side connections not at the Rx Tx because the outputs on the Rx and Tx are not logical. Think of it as the Tx Nano is transmitting a nibble (4 bits) of data and the Rx Nano is receiving that nibble of data. Here are some close up pictures to help.

Logic Analyzer DSC00073

Tx Nano DSC00074

Rx Nano DSC00076

Results, short pulse is the Tx, Long Pulse is the Rx. The Tx should pulse a pattern and the Rx should receive the same pattern. PulseView1

PulseView2

Tx & Rx Connections for Arduino Nano Nano TX Rx Connections

Watch the above videos for more information

Tx Nano DSC00084

DSC00085

DSC00087

DSC00086

Rx Nano DSC00081

DSC00082

DSC00083

Tx ESP32S DSC00088

DSC00089

DSC00090

DSC00091

DSC00092

DSC00093

Rx ESP32 DSC00094

DSC00095

DSC00096

DSC00097

DSC00098

DSC00099

Disclaimer:

This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This software is used at your own risk. I am under no obligation to maintain, support or leave this software or documentation in the public domain, likewise I am under no obligation to release designs for all the sensors or other electronics that I have developed.