Számjegyek "titkosítása" szimbólumokkal - hexadecimális számrendszerben - Lenne kedvetek segíteni?

Assembler Arnold témája a 'Computer-világ' fórumban , 2017 Május 2.

  1. Először is, hogy átlátható legyen, mi a célom a kérdéssel, kezdeném a történet legelején.
    Aki a mögöttes történetre nem kíváncsi, átugorhatja, a tematikus kifejtést a ×¤× szimbólumnál folytatom.

    Aki a kérdés "miért"-jére sem kíváncsi, az a *** szimbólumhoz ugorhat. A fő lényeg ez, a kérdés végülis ebből is érthető, de a megfogalmazása nem lett különálló.

    --------------------------------------------------------------------------------

    Egy vidéki vállalatnál dolgozom, gyakorlatilag beágyazott rendszerek (embeeded system, firmware) programozásával foglalkozom, gyakorlom. Az első évek munkatapasztalatait gyűjtöm.
    Egy nálam 10 évvel idősebb kollégám van, egy évvel előbb tudott a cégnél kezdeni, de bátran mondhatom, hogy volt szerepem abban, hogy fejlesztési vonalon maradhassunk a cégnél, a szoftverek többségét én írtam meg és dokumentáltam le, ami az Ő nevén futott.

    Jó ideig a legjobb barátomnak tartottam, ha bajom volt, mindig hozzá menekültem le. Munkahelyen az első hónapokban nagyon jól együtt tudtunk dolgozni.
    De aztán nagyon elromlottak a dolgok.
    Azt kell mondjam, most már teljesen kiismertem őt, és ezt abszolút negatív értelemben értem. Egyszerűen neki más sikere az ő sikertelensége, s az ő sikere másnak a sikertelensége.

    Merem mondani, rengeteg időt rászántam arra, hogy programozásban, matematikában, abban, amiben jobb vagyok, segítsem, kijavítsam a hibáit. Abból az időből, amit akár a saját készségem, tudásom, gyakorlatom javítására is fordíthattam volna. Mindebben ténylegesen az fáj, ahogy ezt utána hazugságokkal kifordítva köszönet helyett a fejemhez vágta.... leírva is abszurd, de másképp nem is tudom megfogalmazni ami történt, s ami történik.
    Tovább erről nem is siránkozok, erről ennyi dióhéjban most itt bőven elég.

    Nade hogy mindez hogy jön a topic címéhez?

    Ugyanis miután kiismertem, milyenné is tette ez a munkalehetőség - ami nem hárítható rá semmilyen körülményre, legföljebb az illető mögöttes komplexusaira -, mára már megelégeltem, hogy továbbra is a saját munkáimból nyerészkedik a főnök előtt, míg engem meg ráadásul hátráltat - sajnos tud, mivel az Ő feladataira épülne rá az enyém -, előnyét az én előnytelenségemből véve.
    Sokadszorra történik meg ismét és ismét, hogy ezek ellenére kunyerál el munkákat, vagy ha épp nem vagyok ott lenyúlja, vagy épp kizsarolja tőlem, és sajátjaként adja elő másoknak.
    Beszélni vele erről __tisztességesen__ nem lehet, sőt, egyre inkább nem lehet. Ezt az ember egy idő után fel is adja, én sem tudom bármeddig csinálni.
    Mindemellé hatalmas nagy a szája és a marketingje (mennyivel nagyobb a tapasztala, mennyivel jobban látja meg a dolgokat, blablabla), ami számomra, mivel én vagyok az elszenvedője ennek, rendkívül frusztráló. (Programozni (_ténylegesen_ programozni) máig nem tanult meg, a dolgokhoz sokszor rendkívül tudománytalanul áll hozzá)

    Elég sok minden ráment nekem erre, hogy miatta kellett hetekig szombat-vasárnap teljes műszakokat bent töltenem (mert az alám adott munkával úgy megszívatott, mintha muszáj lenne), az akkor kapott egyéni megrendeléseket sem tudtam időben megcsinálni, egyszerűen lekéstem s elvesztettem azokat....
    Így most egy eléggé mély hullámvölgyön vagyok túl, de az előző héten eszembe jutott valami:
    Ugyanis, ha a "barátomon" más nem is tudok változtatni, mert ezek szerint Ő ilyen, és ezeknek a jó részén sem tudok változtatni, amiket Ő megejt..... védekezni talán csak tudok?! ;) Mi van, ha azt legalább meg tudom akadályozni, hogy a programkódjaimat/részüket lenyúlja, és azokkal villogjon.
    Eszembe jutott, hátha implementálni tudok egy frappáns, kezelhető módszer arra, hogy nélkülem egyszerűen ne tudja lefordítani a további programkódjaimat - ugyanis ott a kulcs, hogy ha nem tudja lefordítani, nem tud vele semmit se kezdeni - míg én azt továbbra is bárhol, körülményesség nélkül meg tudom tenni.
    ... Úgy, hogy a programkód mellett semmin se kelljen módosítani : Egyedül a kódban van benne a kulcs és a védelem is.... ;)

    Az alap teória, ami ezt a talán elsőre furcsának tűnő működést lehetővé teheti, roppant egyszerű és magától értetődő, de minden arra épít, hogy ez meglegyen : az illető saját erőből, saját kútfőből ne tudja átlátni a programot.
    A szituáció pedig pont olyan, hogy ha az olvasó átlátná az eredeti kódot, akkor már nincs kitől védeni azt, mert nem érdekelt benne, akár az alapján írhat másikat is. Ha viszont egy kisebb praktikus módosítást se tudna tudatosan megejteni az eredeti kódon, akkor őtőle véd a védelem, s az védeni is tud.

    Nos:
    פ×)
    A hosszú hétvége alatt nekiláttam, s lényegében implementáltam is egy olyan kódrészletet - a programnyelv helyes kifejezésével élve makrókat - amik egy 32 bites (max. ¬4 milliárdos nagyságrendű) numerikus értéket generálnak egy hozzá való kulcspárhoz. A "mechanika" mozgatóköve az, hogy ez az érték minden új órában s minden nap _automatikusan_ változik (ezt szerencsésen el lehetett érni a fordítóval), a generált érték visszanyomozásához meg kellőképpen át kell látni a kódot, mivel kézenfekvő mód úgy írtam meg, hogy nehezen lehessen kivenni, milyen makrókat kell meghívni. Aki persze átlátja, az azt kezd vele, amit akar, de az meg akár jóval előbb tudja elemezni a kódot, s pl. maga megírni... tehát úgy igyekeztem kivitelezni mindezt, hogy "a jártasnak már ne érje meg, de a laikusnak még pont elveszett úgy legyen".

    A mechanizmus folytatása az, hogy a generált szám és a programkód első soraiban beírt kulcspárja - aminek a helyes beírásával, mintegy jelszóként, "lefordítható" lesz a kód - egy harmadik számot tud kiadni. Lényeg, hogy ez viszont konstans legyen. Azaz lehetséges ÉS szükséges feltétel ezzel a három értékkel, hogy minden adott órához más-és-más kulcs (jelszó) tartozzon.

    Innentől azzal, hogy a harmadik érték - megfelelő kulcspárral, megfelelő jelszóval - egy konstans értékre van beállítva, ebből a programban használt értékek tovább számolhatók, avagy gyakorlatilag "elrejthetők".
    A védelem zárómechanizmusa, és a topic témája pedig végül pont abból jön, hogy az egyébként használt értékek hogy lennének elrejtve:

    Programozásban, különösen beágyazott rendszerek programozásában bájtok szintjén gondolkodunk - logikailag azon belül pedig bittekben, de egyszerre egy nyolcas bitcsoportot, azaz egy bájtot tudunk egy művelet alatt kezelni.
    Nyolc bit, 2^8=256 értékkel két hexadecimális számjeggyel írható le. Ezt viszont a szám decimális formájától megkülönböztetve valamilyen elő/utótaggal, esetemben (C programozási nyelv) előtaggal kell ellátni. Ennek a formája pl.:
    0x05 -> ami ötöt jelent, vagy,
    0x73 -> ami decimálisan 115-el egyenlő

    A program matematikai, operatív, memóriakezelő eljárásai alatt sok olyan _különböző_ bájtérték előfordulhat, amit praktikus is ilyen hexadecimális formában jelölni.
    A trükk pedig a következő:
    A C nyelv grammatikai szabályai szerint _!szabadon!_definiált_ azonosító (ez humán nyelvek analógiájára leginkább névszónak, azon belül meg tulajdonnévnek felel meg) lehet bármi olyan nem kulcsszónak lefoglalt név, aminek első karaktere nem szám, továbbá számokból, kis- és nagybetűkből, ill. köztük esetlegesen aláhúzásjelből áll.
    Miért is kell erre gondolni? Nézzük csak meg a hexadecimális előtag formáját:
    0x
    De ha én már egy olyat leírok, hogy:
    Ox
    Az bizony a nyelvi szabályok szerint egy - mivel nem kulcsszó - szabadon lefoglalható ill. definiálható azonosító.
    Ebből kiindulva pedig:
    byte Ox17 = 0x73;
    Voilá! Tulajdonképpen létrehoztam egy "Ox17" (tehát nagy O _betűvel_ az elején) azonosítót, aminek 0x73 hexadecimális értéket (decimálisan 115) adtam.
    A példadefiníció írásképe pedig magáért beszél: A cél nem az - bár a hatás szempontjából praktikus -, hogy az ember a 0x előtagot a Ox betűpárral összetévessze.... Ha pl. az illető még talán diszlexiás is, de sokáig fürkészi a kódot, rájön a turpisságra; A lényeg, hogy pl. egy így megírt programban ábrázolt Ox17 egyáltalán nem 0x17 értéket fog jelölni, hanem egy teljesen más, és a külső laikus számára !_ismeretlen_! értéket.

    Azaz:
    Minden egyes bájtra van előre - a "jelszavazást" végző makrórendszer által tartalmazva - egy Ox (nagy O betűvel) kezdetű definíció, 00-tól egészen FF-ig (256 különböző azonosító, 256 értékre), amikre a kulcspárosból (a harmadik !konstans! érték számolásával) végig számolva van az összes, mint a 256 féle különböző bájtérték, DE mindegyik alaposan megkeverve, egyik sem rendelve hasonló alakú azonosítóhoz. Szimplán így elkerülve azt a fatálisan bagatell hibát, hogy az Ox tag 0x előjelre cserélésével minden működjön.
    Az adott órában megfelelő "jelszó" birtokában - amit természetesen egy arra való programmal magamnak generálok le mindig a következő fordításhoz - mindent "rendesen" behangolva "bájtazonosítók" és a bájtértékek között egy pontos egy-az-egyhez megfeleltetés alakul ki; Ha viszont a kulcspáros manuálisan megadott tagja (azaz a "jelszó") hibás, vagy már nem ahhoz az időponthoz tartozik, akkor minden borulni fog, a program pedig - bár, valójában a fordító lefordít egy binárist a kódból -, a program a mindenhol hibás értékekkel működésképtelen lesz.
    Azaz ezzel párhuzamos a második teória, mint szükséges, de nem hátráltató kompromisszum : Szó szerint nem lesz igaz, hogy a fordító nem fogja tudni a kódot lefordítani, de nem fog helyesen fordítani, mert nem a helyes kódot kapja : azaz végeredményben gyakorlatilag nem tudja a helyes kódot lefordítani.

    Igazából pofonegyszerű, csak megfogalmazni byonyolult kissé. :rolleyes:

    Ehhez persze nekem a programozás során, egy olyan program írása során, amit már ezzel a rendszerrel/szisztémával írok meg, szükségem van egy bizonyos térképre, ami az azonosítók és valós értékük közötti megfeleltetéseket írja le, amit egyfajta értéktáblázatként tudok használni.
    Egész egyszerűen valami ilyesmi:
    34 -> 67
    13 -> 0D
    A5 -> BE
    stb.
    Ami alapján én tudhatom, a megfelelő, adott órára érvényes jelszóval való fordításkor melyik Ox kezdetű azonosító melyik értéket fogja (mindig az adott órára megfelelő jelszóval MINDIG időponttól függetlenül UGYAN AZT az értéket) felvenni, ami alapján tudom, hogy ezeket az azonosítókat hogy tudom használni a programomban.

    És ITT jön nyílegyenest a képbe a topic megnevezése, címe, s témája:
    ***)

    A megvalósítás "díszítőköve" (lényegében már csak ez van vissza), cicomája az lenne, ha ezt az értéktáblázatot kinyomtatom magamnak, akkor ne a mindenki által értelmezhető számjegyeket (beleértve az összes hexadecimális számjegyet is) használjam, hanem egy megfeleltetésen alapuló szimbólumrendszert, mint a 16 hexadecimális jegyre egy-egy saját szimbólumot, amit már megjegyzek és fejből használok.
    Olyan egyszerű, minél egyszerűbb, DE frappáns s laikus számára minél inkább ismeretlennek tűnő szimbólumokra, szimbólumrendszerre lenne szükségem 16 jegy leváltására, ami minél könnyebben, minél gyorsabban tanulható. Olyanra, amit aránylag gyorsan megtanulva, magabiztosan, reflexből használható, fordítható az eredeti jegyekre.

    (Mindez amiatt némileg praktikus is, mivel a táblázatot gyakran kell majd használjam a munkagépemnél, amikor viszont nem vagyok, bárki bejöhet, turkál rajta... erre már többször is volt példa, elrejteni pedig nem nagyon tudom.)

    Ennek a 16 elemű szimbólumrendszernek a megkonstruálásához, kitalálásához várnék ötleteket, javaslatot, tippet, tanácsot.... stb.-stb.

    Előre is nagyon köszönöm!
     

Megosztás