Newsgroup: it.comp.lang.visual-basic
Titolo: [LONG] [COMPLICATO] Rendere digitabile una password

Probabilmente e' una cretinata, ma ho la tendenza a perdermi sulle cose
complicate. Cosi'... :-)
Alur...
Sto' lavorando ad un sistema di protezione basato sul caso classico della
chiave ottenuta dall'hardware del PC.
L'algoritmo funziona abbastanza bene, e' qualcosa del tipo (in sequenza):
Lato Software House:
Generazione codice cliente
Generazione chiave dei moduli acquistati
Lato Cliente:
Generazione codice PC
Lato SW House:
Cryptazioni varie.
Generazione codice di sblocco
Cryptazioni varie.
Lato Cliente:
Inserimento chiave di sblocco
Decryptazioni varie.
Verifica di validita' della stringa
Decryptazioni varie.
Attivazione moduli.
Di per se, e' abbastanza banale. Il problema nasce nel momento in cui devo
far digitare il codice al cliente!
Alur...io parto da una sequenza iniziale di 8 byte usata come base per le
operazioni successive. Tra leva e metti, finisco con 13 byte di chiave di
sblocco. Il primo problema che avevo riscontrato era che chiaramente il
codice non era digitabile, visto che una parte dei caratteri e' fuori dal
range ASCII della tastiera.
Ho pensato quindi di applicarmi un'algoritmo di UUEncode...pero' mi sono
reso conto di due cose:
1) Il numero di caratteri finali aumenta parecchio (da 13 a 20)
2) Ottengo comunque dei caratteri difficili da digitare e da riferire
telefonicamente.
Ora, il (2) potrei anche risolverlo creandomi un mio set di caratteri ASCII
valido e facendo lavorare l'UUEncode direttamente su quello, pero' poi la
(1) passa da 20 caratteri ad un'infinita'...
Fermo restando che l'algoritmo restera' quello, vi viene in mente nessun
modo per risolvere la situazione?
Ad esempio...ho sentito parlare di algoritmi di cryptazione a chiave doppia,
ma non ho idea di come funzionino e se risolverebbero il mio problema.
Pensavo ad una cosa di questo genere: io riduco in qualche modo gli 8 byte
iniziali a 7. Poi le altre informazioni che devo inserire nella chiave,
invece di aggiungerle direttamente nella stringa e quindi aumentare il
numero di caratteri, usarle come chiave per cryptare la stringa. Il problema
e' che, chiaramente, il software lato Cliente quelle informazioni in piu'
deve riceverle; ora, se io uso un sistema a chiave doppia, posso fare in
modo da codificare l'informazione iniziale con una chiave, e poi con una
seconda chiave decodificare e riottenere l'informazione iniziale e la prima
chiave?
In questo modo riesco a mantenere la chiave di sblocco sui 7 Byte, che poi
anche se diventano 14-15 dopo la riduzione a solo ASCII digitabile e' piu'
che accettabile...
Suggerimenti? :-D

 range ASCII della tastiera.
Un metodo semplice per rendere chiara la chiave è di convertire ogni codice
ascii nella sua rappresentazione esadecimale.
La controindicazione è che il numero di caratteri raddoppia secco.
Per ovviare a questo potresti trovare un sistema di riduzione, che so, pigli
solo i caratteri pari, oppure ne ricavi la radice, intesa come ad es.:
&HF5 --> &HF + &H5 --> &H14 --> &H4 + &H1 --> &H5 (digita "5"), cioè sommare
le cifre fino a arrivare ad averne una sola.
Ciao
--
Math Parser : 
http://www.neodatatype.net
FlowChart   : 
http://www.neodatatype.net/dump/flowchart/dir.asp
Sito Comune : 
http://www.it-lang-vb.net

 cose complicate. Cosi'... :-)
Per un'applicazione identica a questa io ho usato la conversione in
esadecimale.
Immediata e facile da comunicare anche telefonicamente.
E' vero che il numero dei caratteri raddoppia, ma considera anche che
volendo usare un set ASCII che sia leggibile, puoi usare le lettere
maiuscole e minuscole, i numeri e qualche altro carrettere.
A quanto arrivi? 26+26+10+ diciami altri 10 caratteri...fanno 72.
In questa maniera si sta quasi quadruplicando la dimensione
dell'informazione, mentre con l'hex sei solo al doppio.
--
Starman

 Suggerimenti? :-D
una possibilita' sarebbe quella di inserire  sia in lato cliente che sh una
tabella di sostituzione.
una volta generata la chiave di sblocco contenente i caratteri non
editabili, traslarla con una tabella ad hoc
asc car sost
 0   -   r
 1   -   W
<cut>
64  @  8
65  A  g
<cut>
254 -  U
255 -  7
all'avvio del lato client il modulo genera la chiave, la trasla e verifica
se corrisponde a quella inserita dall'utente.
chiaramente sono tutte soluzioni della serie "provaci, ma se dicono davvero
non ti salvi". ;o)

 nessun modo per risolvere la situazione?
Ascii o Chiave reg da mandare in mail , oppure implementare uno scambio dati
tra client e pc automatizzato, tipo l'abilitazione di PcCilin :
Hai un codice, clicchi su un link (che fa il post del codice macchina +
codice programma ) e dopo averti fatto mettere i dati ti spara a video e in
mail la chiave da copia&incollare .
-- 
-Gigio@Work(?)-

> Suggerimenti? :-D
Con un Base64 di quanto aumenta la chiave?
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it

 Con un Base64 di quanto aumenta la chiave?
di un terzo, ogni blocco di 3 byte viene scomposto in 4 byte con i 2 bit
piu' significativi posti a 0.
beppe

 bit piu' significativi posti a 0.
Quindi se hai una chiave di 10 cifre diventerà di 13 cifre...
Non mi sembra male come numero di cifre.
La M$ utilizza chiavi a 25 cifre!
