Fjärrkontroll till bilen? Ja tack!
Fjärrkontroll till bilen? Ja tack!
Jag har bestämt mig för att bygga fjärrstyrning till låset i min bil. Mest för skojs skull och för att jag ändå ska montera in en elektroniklåda med diverse funktioner.
Här är två bilder på fjärrkontrollen:
Mikroprocessorn är en AT90S2313. Denna valde jag för att det är den fysiskt minsta (vad jag vet) som har serieport. Det gröna lilla kortet är en sändarmodul från kjell o co som enkelt skickar ut det den tar emot från serieporten på AVRen på radio. Dessvärre var jag lite korkad i mitt val av batterier. CR2032 är alldeles för stora egentligen. Men nu är det gjort och jag giter inte göra om kortet i nuläget iaf.
Iallafall består koden som skickas ut av 31 tecken som bildar sju ord och ett utropstecken. Detta skickas med en skum baudrate som jag inte har orkat räkna ut men som iallafall inte håller sig till någon som helst standard. Detta för att göra det svårare att avlyssna . Jag har inte haft möjlighet att kolla om själva sändardelen fungerar dels för att mottagaren inte är klar och dels pga den skumma baudraten.
Så är det. Och det ska bli kul att göra klart resten .
Här är två bilder på fjärrkontrollen:
Mikroprocessorn är en AT90S2313. Denna valde jag för att det är den fysiskt minsta (vad jag vet) som har serieport. Det gröna lilla kortet är en sändarmodul från kjell o co som enkelt skickar ut det den tar emot från serieporten på AVRen på radio. Dessvärre var jag lite korkad i mitt val av batterier. CR2032 är alldeles för stora egentligen. Men nu är det gjort och jag giter inte göra om kortet i nuläget iaf.
Iallafall består koden som skickas ut av 31 tecken som bildar sju ord och ett utropstecken. Detta skickas med en skum baudrate som jag inte har orkat räkna ut men som iallafall inte håller sig till någon som helst standard. Detta för att göra det svårare att avlyssna . Jag har inte haft möjlighet att kolla om själva sändardelen fungerar dels för att mottagaren inte är klar och dels pga den skumma baudraten.
Så är det. Och det ska bli kul att göra klart resten .
Mottagaren hade jag tänkt att göra av en ATmega128 fast den är svinaktigt apdyr men jag behöver två serieportar. En till fjärrkontrollen och en till mp3-datorn. Larm och larm. Där har suttit ett larm i bilen och sirenen sitter kvar så man skulle ju egentligen kunna nyttja den . Främst var detta tänkt att bara tjäna som fjärrstyrning till låset men man kunde ju iofs nyttja elboxen till larm också.
Även om man har en krypteringsalgoritm så är det väl fortfarande bara att spela in och skicka exakt samma? En kompis kom på att man skulle kunna ha dubbelriktad kommunikation och blanda in MD5-hashar och sådant. Det blir lite jobbigt för att inte tala om att fjärrkontrollen blir större i och med mottagaren också. Kommersiella fjärrkontroller är inte säkrare. Jag vet dock inte vad de skickar för något men jag kan inte tänka mig att de är säkrare än att man kan spela in och spela upp..
Men iallafall så är baudraten så pass hög att jag har svårt att tro att valfritt inspelningsdon är tillräckligt exakt för att det ska gå.
Även om man har en krypteringsalgoritm så är det väl fortfarande bara att spela in och skicka exakt samma? En kompis kom på att man skulle kunna ha dubbelriktad kommunikation och blanda in MD5-hashar och sådant. Det blir lite jobbigt för att inte tala om att fjärrkontrollen blir större i och med mottagaren också. Kommersiella fjärrkontroller är inte säkrare. Jag vet dock inte vad de skickar för något men jag kan inte tänka mig att de är säkrare än att man kan spela in och spela upp..
Men iallafall så är baudraten så pass hög att jag har svårt att tro att valfritt inspelningsdon är tillräckligt exakt för att det ska gå.
- Illuwatar
- Inlägg: 2256
- Blev medlem: 10 november 2003, 14:44:27
- Skype: illuwatar70
- Ort: Haninge
- Kontakt:
Du skulle kunna köra med en kodtabell som är lika i både mottagare och sändare. I denna tabell lagras ett antal koder (antal beror på kodlängd och ledig plats i AVR'en i sändaren). som du slumpmässigt väljer ifrån med ett indexvärde. När du sedan skickar datat du vill kryptera skickar du först en indexsiffra (okrypterad men vald genom slump) som pekar på vald position i tabellen av koder. Därefter sickar du dina datatecken krypterade med den valda koden genom enkel XOR. Efter ett visst antal tecken har sänts slumpar du ut ett nytt index till kodtabellen och upprepar proceduren. Enklaste sättet att fixa slumptal är att använda en av timrarna i AVR'en.
I mottagaren läser du ut indexsiffran (du kan behöva lägga ett slags starttecken innan indexet för att veta vart du ligger i dataströmmen), plockar ut rätt kod ur mottagarens tabell (som är identisk med sändaren) och genom XOR på mottaget data får du tillbaka det du sände i klartext.
Med en metod som denna blir det ganska svårt att avkoda genom att bara lyssna. Kodnyckeln sänds aldrig i luften - den förblir dold i din utrustning. Fler koder i tabellen, längre kodord samt frekventa byten av kod gör det i princip oknäckbart för någon som inte verkligen anstränger sig. Då måste din bil vara något väldigt märkvärdigt om någon skall göra det.
En kodlängd på 8 bitar (256 olika koder) borde räcka - dessutom enklast att programmera för. Då räcker det med två tecken för indexet (0 - FF) samt en startsymbol (ett ascii-tecken som inte används för information eller kan uppstå genom XOR-operationen). Varje ascii-tecken du sänder kör du genom XOR med vald kod. Detta ger tre tecken (bytes) overhead på varje datablock du sänder. Blockstorleken (antal tecken innan ny kod väljs) behöver inte vara så stor - typ 10 tecken åt gången, sedan byt kod.
Det svåraste i detta fall med enväga kommunikation är om det uppstår bitfel. Även om du lägger till checksumma på varje sänt teckenblock så kan mottagaren inte rapportera tillbaka att fel upptäckts och begära omsändning. Så du får helt enkelt lita på att länken fungerar och designa därefter.
I mottagaren läser du ut indexsiffran (du kan behöva lägga ett slags starttecken innan indexet för att veta vart du ligger i dataströmmen), plockar ut rätt kod ur mottagarens tabell (som är identisk med sändaren) och genom XOR på mottaget data får du tillbaka det du sände i klartext.
Med en metod som denna blir det ganska svårt att avkoda genom att bara lyssna. Kodnyckeln sänds aldrig i luften - den förblir dold i din utrustning. Fler koder i tabellen, längre kodord samt frekventa byten av kod gör det i princip oknäckbart för någon som inte verkligen anstränger sig. Då måste din bil vara något väldigt märkvärdigt om någon skall göra det.
En kodlängd på 8 bitar (256 olika koder) borde räcka - dessutom enklast att programmera för. Då räcker det med två tecken för indexet (0 - FF) samt en startsymbol (ett ascii-tecken som inte används för information eller kan uppstå genom XOR-operationen). Varje ascii-tecken du sänder kör du genom XOR med vald kod. Detta ger tre tecken (bytes) overhead på varje datablock du sänder. Blockstorleken (antal tecken innan ny kod väljs) behöver inte vara så stor - typ 10 tecken åt gången, sedan byt kod.
Det svåraste i detta fall med enväga kommunikation är om det uppstår bitfel. Även om du lägger till checksumma på varje sänt teckenblock så kan mottagaren inte rapportera tillbaka att fel upptäckts och begära omsändning. Så du får helt enkelt lita på att länken fungerar och designa därefter.
Något förenklad beskrivning....
http://auto.howstuffworks.com/remote-entry2.htm
Sammanfattning: bygger på en 40 bitars rullande kod.
http://auto.howstuffworks.com/remote-entry2.htm
Sammanfattning: bygger på en 40 bitars rullande kod.
Jag och min kompis har kommit fram till följande:
Vi kommer att bygga det delvis på en 16-bits rullande kod (tack gvs!).
Denna ska påverka en nyckel som vi krypterar trafiken med. Utöver detta
kommer trafiken att involvera en fast nyckel (som givetvis kan ändras manuellt), en MD5-hash och eventuellt AES.
Så för att öppna och inte ha fjärrkontrollen måste man:
1. Veta frekvensen
2. Kunna sända/ta emot AM på den
3. Veta vilken nyckel av 65536 olika möjliga trafiken måste gå med just då
4. Veta den fasta nyckeln
5. Göra en MD5-hash av koden som mottagaren i bilen skickar ut
6. Tolka baudraten som inte följer någon standard.
Givetvis skulle man kunna påverka även den fasta nyckeln med rullande kod. Detta gör det hela lite mer intressant och svårare att knäcka givetvis .
Vad tror ni om detta?
Illuwatar: Jag tror inte att jag förstod allt. Men med den metoden du beskriver, skulle det inte vara teoretiskt möjligt att spela in vad fjärrkontrollen sänder ut och sedan spela upp för mottagaren?
Edit: Nu behövs ju givetvis både sändare och mottagare. Frågan är om man inte skulle byta ut alla komponenter mot ytmonterade för att spara plats.
Vi kommer att bygga det delvis på en 16-bits rullande kod (tack gvs!).
Denna ska påverka en nyckel som vi krypterar trafiken med. Utöver detta
kommer trafiken att involvera en fast nyckel (som givetvis kan ändras manuellt), en MD5-hash och eventuellt AES.
Så för att öppna och inte ha fjärrkontrollen måste man:
1. Veta frekvensen
2. Kunna sända/ta emot AM på den
3. Veta vilken nyckel av 65536 olika möjliga trafiken måste gå med just då
4. Veta den fasta nyckeln
5. Göra en MD5-hash av koden som mottagaren i bilen skickar ut
6. Tolka baudraten som inte följer någon standard.
Givetvis skulle man kunna påverka även den fasta nyckeln med rullande kod. Detta gör det hela lite mer intressant och svårare att knäcka givetvis .
Vad tror ni om detta?
Illuwatar: Jag tror inte att jag förstod allt. Men med den metoden du beskriver, skulle det inte vara teoretiskt möjligt att spela in vad fjärrkontrollen sänder ut och sedan spela upp för mottagaren?
Edit: Nu behövs ju givetvis både sändare och mottagare. Frågan är om man inte skulle byta ut alla komponenter mot ytmonterade för att spara plats.
Ser nice ut, men om man vill ha något smått är det absolut ytmonterat som gäller. Skulle ta en ytmonterad 8pins PIC (med intern oscillator) i sändaren (eller motsvarande AVR om det finns, noll koll på AVR). Visserligen har de inte serieport i hårdvara, men det behövs inte heller. Sända data seriellt i mjukvara är inte alls svårt, ta emot tillförlitligt är lite svårare men inte speciellt komplicerat.
Bara kör ett timer-interrupt och skifta ut en bit i taget på en pinne...
Bara kör ett timer-interrupt och skifta ut en bit i taget på en pinne...