1.0.16 • Published 4 years ago

tarobox v1.0.16

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

tarobox

TaroBox - A simple variable-size PRNG built from btoa and XOR

Program

Compression step

  input - raw data, compressed length

  output - data of compressed length

  procedure - simply wrap around the data from end to start, and xor it, and add a counter to it

  operations are done modulo 256

Expansion step

  input - compressed data

  output - raw data

  procedure - take the btoa of the data (performing any necessary conversion first to make the data valid input for btoa)

Hypothesis

This should be a pretty good PRNG for states of size 8 and above, and especially of size 20 and above

Benefits

  • Built with simple widely available primitivies (XOR, ADD, BTOA)
  • Easy to conceptualize and remember
  • Tunable parameters
  • No magic constants or BS

Costs

  • Slow if secure (we sum the state to produce output byte), yielding 1 byte of IID and entropy per round.
  • Fast but insecure (we could run in 'streaming' mode, just output the entire state on each round, yielding 20 bytes of IID per round but zero bytes of entropy (since you can reconstruct the next state from this one).
  • Untested. It passes gzip/zip test. Even if it passes SMHasher / PractRand, it's not "cryptographic".

Testing

Let's test it, at first just using ZIP tests.

Test 1 - Generate 1000000 random bytes, compress with gzip. Result: 0% compression with gzip.

Possible applications

  • For fun
  • For producing statistically IID numbers / bits
  • For constructing a proof-of-work / hash algorithm.
  • For constructing a toy (or DIY, depending on your risk tolerance / trust) stream cipher.

Where did this idea come from?

It just came to me all in an instant. Out of nowhere.

I intuited that the combination of simple compression and expansion functions, with a counter, would produce good entropy / IID. And it does. I have experience doing this.

Where is the name from?

TaroBox is an anagram of the constituent parts "btoa" and "xor"

Install

npm i --save tarobox
1.0.16

4 years ago

1.0.15

4 years ago

1.0.11

4 years ago

1.0.14

4 years ago

1.0.12

4 years ago

1.0.10

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

5 years ago

1.0.1

5 years ago