Op school maken wij gebruik van de TI 83 rekenmachines. Hierop kan je (eenvoudige) programma's schrijven. Welnu heb ik er eentje geschreven maar graag zou ik het beveiligen door middel van een identificatie. Concreet: indien iemand het juiste wachtwoord intypt, krijgt hij toegang tot het werkelijke programma. Eenvoudigweg kun in je programma zoiets schrijven:
Maar aangezien de code publiek is, kan het wachtwoord meteen bekeken worden. Nu dacht ik er aan om het juiste wachtwoord en het ingetypte te versleutelen en met mekaar te vergelijken. Indien ze hetzelfde zijn, is het wachtwoord juist. Echter, volgens mij is de "versleutelfunctie" niet aanwezig en moet ze dus zelf aangemaakt worden. Een eenvoudige encryptie zou ik kunnen maken, maar de bedoeling is dat het onomkeerbaar is én dat je niets bent met de code voor het creëren van die sleutel.
Weet iemand of dit mogelijk is, zo ja, kan hij mij dan helpen?
Het is waarschijnlijk makkelijker om te zorgen dat het programma niet meer kan worden geëdit dan dat je zelf zo'n functie maakt...
Waarschijnlijk heb je wel de MirageOS application op je rekenmachine staan? Daar kan je heel gemakkelijk een programma mee blokkeren. Om te zorgen dat MirageOS hem kan openen ga je naar de eerste regel van je programma en zet daar niets behalve een dubbele punt (alpha + .).
Dan ga je naar MirageOS, zoek je je programma op en druk je op de X,T,Theta,n knop. Dan kies je File door op y= te drukken, vervolgens Info met de knop trace. En dan zoom op je programma te blokkeren.
Nu kan je er via prgm > edit niet meer bij. Als je hem nog een keer locked is hij weer geünlocked.
Hiervoor moet je wel een TI-83 Plus hebben, want de TI-83 heeft geen apps knop.
Ook een leuke oplossing, alleen kan je dan nog steeds bij het programma als je het echt wilt. Je kan dan die regel waarin je het password programma aanroept weghalen of je kan in het password prog kijken wat de code is. Die getKey codes die je daar als wachtwoord ziet zijn heel simpel terug naar de knoppen te vertalen.
Inderdaad, dat is te doen in Basic (die programmeertaal van de GR zelf).
Ik het zelf ook een TI-83 en ik ken het probleem van geen Apps kunnen draaien. Je zou ook AShell erop kunnen zetten (de MirageOS voor de Ti83). Als je je programma's in ASM schrijft en dan op je GR zet kan niemand ze bewerken. Je moet ze dan openen met AShell.
Als je echt het md5 algoritme op je rekenmachine gaat maken wordt je programma wel erg langzaam. En omdat je op de TI 83 niet zo heel veel ram hebt is het ook zonde van de ruimte.
Zonder shells en apps zal je in ieder geval wel zelf een algoritme moeten maken of zoeken. Dat ze dan wel zijn te kraken daar kan je dan niets aan doen, maar waarschijnlijk heeft tachtig procent van de gebruikers van je programma toch geen idee hoe dat moet!
//Use binary fractional part of the sines of integers as constants:
for i from 0 to 63
k[i] := floor(abs(sin(i + 1)) × 2^32)
//Initialiseer variablen:
var int h0 := 0x67452301
var int h1 := 0xEFCDAB89
var int h2 := 0x98BADCFE
var int h3 := 0x10325476
//Voorbewerking:
voeg "1" bit aan het bericht toe
voeg "0" bits aan bericht toe totdat berichtlengte in bits ≡ 448 (mod 512)
voeg lengte van bericht als 64-bit little-endian integer toe aan bericht
//Verwerk het bericht in opeenvolgende blokken van 512-bit:
for each 512-bit chunk of message
break chunk into sixteen 32-bit little-endian words w(i), 0 ≤ i ≤ 15
//Initialiseer de hashwaarde voor dit blok:
var int a := h0
var int b := h1
var int c := h2
var int d := h3
//Hoofdlus:
for i from 0 to 63
if 0 ≤ i ≤ 15 then
f := (b and c) or ((not b) and d)
g := i
else if 16 ≤ i ≤ 31
f := (d and b) or ((not d) and c)
g := (5×i + 1) mod 16
else if 32 ≤ i ≤ 47
f := b xor c xor d
g := (3×i + 5) mod 16
else if 48 ≤ i ≤ 63
f := c xor (b or (not d))
g := (7×i) mod 16
temp := d
d := c
c := b
b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b
a := temp
//Tel de hash van dit blok op bij het resultaat tot nog toe:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
var int digest := h0 append h1 append h2 append h3 //(uitgedrukt als little-endian)
Haha Ken jij dan de "methode" waarop ze een willekeurige tekenreeks omzetten naar een reeks van 32 getallen?
Ja, ik had toen nog niet opgezocht of het kon, later wel... Toch bedankt hoor! Het lijkt me wel geen koud kunstje om het te implementeren in de programmacode van mijn ZRM. Bovendien zal het, zoals iemand hierboven zei, veel RAM gebruiken. Kennen jullie misschien een encryptiemethode die iets minder ingewikkeld is?
Verzin er zelf één?
Ik denk niet dat het een zware beveiliging moet zijn of wel?
Gewoon letter in cijfer omzetten, deze lekker husselen formule erbij en dan heb je cijfercode.
Een eenvoudige encryptie is inderdaad eenvoudig. Maar het probleem is dat "de mogelijke inbreker" beschikt over:
- de encryptiemethode
- het versleutelde wachtwoord
A.d.h. van deze gegevens mag hij dus niet in staat zijn om het oorspronkelijke wachtwoord te herhalen. En het is hier dat ik niet weet hoe het aan te pakken...
Als je een hash functie gebruikt zal zo'n inbreker nooit meer jouw originele wachtwoord terugkrijgen. Het ingevoerde wachtwoord wordt gehashd en vergeleken met het gehashde wachtwoord dat je in het script hebt staan. Een heel simpele hash functie in php: