One-time pad: Difference between revisions
Content added Content deleted
m (support for management) |
m (lines starting with "-" count as "used") |
||
Line 13: | Line 13: | ||
* such files have a file-extension ".otp" |
* such files have a file-extension ".otp" |
||
* lines starting with "#" may contain arbitary meta-data (i.e. comments) |
* lines starting with "#" may contain arbitary meta-data (i.e. comments) |
||
* lines starting with "-" count as "used" |
|||
* whitespace within the otp-data is ignored |
|||
Line 18: | Line 20: | ||
<pre> |
<pre> |
||
# Example data - Wikipedia - 2014-11-13 |
# Example data - Wikipedia - 2014-11-13 |
||
ZDXWWW EJKAWO FECIFE WSNZIP PXPKIY URMZHI JZTLBC YLGDYJ |
-ZDXWWW EJKAWO FECIFE WSNZIP PXPKIY URMZHI JZTLBC YLGDYJ |
||
HTSVTV RRYYEG EXNCGA GGQVRF FHZCIB EWLGGR BZXQDQ DGGIAK |
-HTSVTV RRYYEG EXNCGA GGQVRF FHZCIB EWLGGR BZXQDQ DGGIAK |
||
YHJYEQ TDLCQT HZBSIZ IRZDYS RBYJFZ AIRCWI UCVXTW YKPQMK |
YHJYEQ TDLCQT HZBSIZ IRZDYS RBYJFZ AIRCWI UCVXTW YKPQMK |
||
CKHVEX VXYVCS WOGAAZ OUVVON GCNEVR LMBLYB SBDCDC PCGVJX |
CKHVEX VXYVCS WOGAAZ OUVVON GCNEVR LMBLYB SBDCDC PCGVJX |
||
QXAUIP PXZQIJ JIUWYH COVWMJ UZOJHL DWHPER UBSRUJ HGAAPR |
QXAUIP PXZQIJ JIUWYH COVWMJ UZOJHL DWHPER UBSRUJ HGAAPR |
||
CRWVHI FRNTQW AJVWRT ACAKRD OZKIIB VIQGBK IJCWHF GTTSSE |
CRWVHI FRNTQW AJVWRT ACAKRD OZKIIB VIQGBK IJCWHF GTTSSE |
||
EXFIPJ KICASQ IOUQTP ZSGXGH YTYCTI BAZSTN JKMFXI RERYWE |
EXFIPJ KICASQ IOUQTP ZSGXGH YTYCTI BAZSTN JKMFXI RERYWE |
||
</pre> |
</pre> |
||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
||
===Part 1=== |
===Part 1: random strings=== |
||
Get true random numbers, and turn them into strings. |
Get true random numbers, and turn them into strings. |
||
Line 66: | Line 68: | ||
... |
... |
||
===Part 2=== |
===Part 2: Encrypt/Decrypt=== |
||
Encryption / Decryption |
|||
See Tcl'ers wiki: |
See Tcl'ers wiki: |
||
Line 75: | Line 76: | ||
===Part 3=== |
===Part 3: Management=== |
||
Management |
|||
* list padfiles in directory |
* list padfiles in directory |
||
* list block between "comment"-lines in padfile |
* list block between "comment"-lines in padfile |
Revision as of 14:57, 18 November 2014
One-time pad is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Implement a One-time pad
- Sub-Tasks
- generate the data for a One-time pad (user needs to specify a filename and length)
- The important part is to get "true random" numbers, e.g. from /dev/random
- encryption / decryption ( basically the same operation, much like Rot-13 )
- For this step, much of Vigenère cipher could be reused,
with the key to be read from the file containing the One-time pad.
- optional: management of One-time pads: list, mark as used, delete, etc.
- Somehow, the users needs to keep track which pad to use for which partner.
To support the management of pad-files:
- such files have a file-extension ".otp"
- lines starting with "#" may contain arbitary meta-data (i.e. comments)
- lines starting with "-" count as "used"
- whitespace within the otp-data is ignored
For example, here is the data from Wikipedia:
# Example data - Wikipedia - 2014-11-13 -ZDXWWW EJKAWO FECIFE WSNZIP PXPKIY URMZHI JZTLBC YLGDYJ -HTSVTV RRYYEG EXNCGA GGQVRF FHZCIB EWLGGR BZXQDQ DGGIAK YHJYEQ TDLCQT HZBSIZ IRZDYS RBYJFZ AIRCWI UCVXTW YKPQMK CKHVEX VXYVCS WOGAAZ OUVVON GCNEVR LMBLYB SBDCDC PCGVJX QXAUIP PXZQIJ JIUWYH COVWMJ UZOJHL DWHPER UBSRUJ HGAAPR CRWVHI FRNTQW AJVWRT ACAKRD OZKIIB VIQGBK IJCWHF GTTSSE EXFIPJ KICASQ IOUQTP ZSGXGH YTYCTI BAZSTN JKMFXI RERYWE
Tcl
Part 1: random strings
Get true random numbers, and turn them into strings.
From Tcl'ers wiki Cryptographically secure random numbers using /dev/urandom
<lang Tcl>puts "# True random chars for one-time pad"
proc randInt { min max } {
set randDev [open /dev/urandom rb] set random [read $randDev 8] binary scan $random H16 random set random [expr {([scan $random %x] % (($max-$min) + 1) + $min)}] close $randDev return $random
}
set alfa "ABCDEFGHIJKLMNOPQRSTUVWXYZ" set len 48 set rs "" for {set i 0} {$i < $len} {incr i} {
if { [expr {$i % 6} ] == 0} { append rs " " } set r [randInt 1 26] set char [string index $alfa $r] append rs $char
} puts ":$rs." </lang>
- Output:
# True random chars for one-time pad : IDEVVW KCTMY KLKLID DSGKIV WHMOX LIEYWF MCIECW OUQVIV.
Todo: write strings to file ...
Part 2: Encrypt/Decrypt
See Tcl'ers wiki: vignere Vigenere ...
Part 3: Management
- list padfiles in directory
- list block between "comment"-lines in padfile
...