Fork me on GitHub

/dev/random As a Service

phoeagon

/dev/random as a service.

Getting Started

Go here or go CLI-ish:

    curl "http://dev-random-as-a-service.appspot.com/dev/urandom?count=34&io=binary"

Enjoy an aesthetical feast by seeing those bytes in garbage codes!

    curl "http://dev-random-as-a-service.appspot.com/dev/urandom?io=ascii"

Use non-blocking /dev/urandom, or check for entropy level before using /dev/random.

    curl "http://dev-random-as-a-service.appspot.com/proc/sys/kernel/random/entropy_avail"

New: For our experimental /dev/full, /dev/null and /dev/zero, see the API section.

Home

Cloud computing era has come and now virtually everything is a service. You create documents, upload files, deploy websites. You can get movies, software, etc. But what if you want some random garbage?

IaaS, SaaS, PaaS, DaaS, we proudly present DRaaS.

Start to use our /dev/random-as-a-service` to get random garbage today! No need to worry if your random generator on your computer is good enough. Switch to our DRaaS, a distributed service available in and optimized for countries worldwide.

Who we are

/dev/random-as-a-service is maintained by a team of software engineers who have failed at finding their girlfriends in real life. Our first-hand experiences in generating non-sense garbage at datings is more than awesome! Over the years we have creating tons of random garbage orally and electronically. So we start this business out of our strengths.

I'm so random. XKCD

XKCD-1210: I'm so random!

Features

What is /dev/random

Quote wikipedia:

In Unix-like operating systems, /dev/random is a special file that serves as a blocking pseudorandom number generator. It allows access to environmental noise collected from device drivers and other sources.

Features

[1] High Quality Randomness

Random Number Generator

Upcoming

Confidentiality, Privacy & Privileges

[1] Because we never have the resources to do so. This may change to ensure compliance with authority regulations[2], and we may be compelled to do so without prior notifications.

[2] Authority includes but not limited to Google, Github, NSA, CIA, KGB, CCP, our romantic partners (should they appear in the future).

Pricing

  Plan          Basic   Premium   BusinessPremium
  ----------------------------------------------
  MaxCount      4096    65536     [Customize]

  Read           Yes     Yes        Yes

  Write          Yes     Yes        Yes

  Refund         3-sec   4-sec     10-sec

  IOCTL           No      Yes        Yes

  Check
  Entropy         Yes     Yes        Yes
  Level

  Routine free
  Entropy Pool     Yes    Yes        Yes
  Refill

  Dedicated       No      Avail 4   Included
  Entropy                Purchase

  Price           Free    $20/Month*   $100/Month*

    * A limited offer is available currently, at 50% discount.

API

Getting Random Garbage

An HTTP-based API is provided for access to /dev/random and /dev/urandom.

The API is simple and elegant. Do an HTTP GET to get the random garbage you want, and we take care of the rest! Our powerful servers across the globe provide you with high-quality random garbage for free!

    $ curl "http://dev-random-as-a-service.appspot.com/dev/urandom"
    c977187c45a5d4b5f495364be3fcccfd442b6d1400a872acadbb2067bac0749a4a6
    <...truncated>
    240e045420e8eaeedba32d5ee3860265d8a888dfa957faf7fa3451d00c46b3e3cb4

We support the following parameters to be sent in the URL.

    non-block: Include this parameter, regardless of its value,
        ensures that the request doesn't block due to lack of
        entropy. This is useful for `/dev/random`, which by default
        blocks if entropy level is not enough for your request.
    count: The number of random bytes to acquire. The limitation depends
        on the quota of your subscription plan. For free users, it's
        limited to 4096.
    io: either 'binary', 'ascii' or 'text'. Default is 'text', which converts
        random data to its corresponding hexidecimal representation
        for human-readability. 'binary' serves raw binary streams and
        'ascii' the same raw-binary stream but pretending to be HTML
        by manipulating its `Content-Type` header.

For example, to get 1234 bytes of random data as binary stream from /dev/random, and force server to return a status code of 503 Service Unavailable when entropy is not enough, use:

    curl "http://dev-random-as-a-service.appspot.com/dev/random?io=binary&count=1234&non-block=a"

Contributing to entropy pool

Issue a POST request to /dev/random.

    curl -v -d @my_password_list.txt -X POST http://dev-random-as-a-service.appspot.com/dev/random

On success, a status code of 202 Accepted is returned.

(Premium only) IOCTL for /dev/random

This API is premium only.

Issue GET/POST request to /ioctl/<fd>/<OPERATION>/<param>/.

According to man 4 random, <OPERATION> may be:

    RNDGETENTCNT
    RNDADDTOENTCNT
    RNDADDENTROPY
    RNDZAPENTCNT
    ...

<fd> indicates the file descriptor and may be any integer. <param> depends on <OPERATIONS> and you should consult the manual for detailed usage.

For example, to check the entropy level, use:

    $ curl http://dev-random-as-a-service.appspot.com/ioctl/4/RNDGETENTCNT/4/
    8192
    <Your result may differ>

To increase the entropy level by 30, use:

    $ curl http://dev-random-as-a-service.appspot.com/ioctl/4/RNDADDTOENTCNT/30/

(We have a fancy nuclear based randomness generator that refills the entropy pool every some interval.)

/proc/sys/kernel/random/entropy_avail API

This is an HTTP-GET API to get the entropy level.

    $ curl http://dev-random-as-a-service.appspot.com/proc/sys/kernel/random/entropy_avail
    8192
    <Your result may differ>

This differs from the IOCTL version for it's not restricted to permium users.

Use python as a client!

For ease of illustration we use requests.

    import requests
    req = requests.get('http://dev-random-as-a-service.appospot.com/dev/urandom')
    if req.status_code != 200:
        print "ERR"
    else:
        print req.text

(Experimental) /dev/full, /dev/zero & /dev/null

This API is experimental and in early stage.

/dev/full, /dev/zero & /dev/null API is the same as that of /dev/random and /dev/urandom, both GET and POST supported.

  curl "http://dev-random-as-a-service.appspot.com/dev/null"
  <You get a response of 0-length in content.>
  curl "http://dev-random-as-a-service.appspot.com/dev/zero?count=10&io=binary" | md5sum
  a63c90cc3684ad8b0a2176a6a8fe9005  -
  <MD5 of 10-bytes, all of which are 0x0>

Posting to /dev/full always yields 413 Entity too large and reading is equivalent to from /dev/zero.

Implementations & Hosting Your Own

We implemented our service using the device of Schrodinger's Cat.

Schrodinger's Cat

To start your own, firstly you need a cat farm.

Kitten Kitten Kitten Kitten Kitten Kitten Kitten Kitten

Contact

phoeagon

Other projects: