rkey.1
Author: cmaier@cmassoc.net

    rkey(1)                                      Qualcomm Atheros Open Powerline Toolkit                                     rkey(1)

    NAME
           rkey - HomePlug AV Random Key Generator

    SYNOPSIS
           rkey [options] file

    DESCRIPTION
           Dynamically generate distinct HomePlug AV compliant keys.  A new key is printed on stdout with each program invocation or
           iteration, unless this is suppressed.  Key computation is seeded using a 64 ASCII character string stored in a user  cre‐
           ated  seedfile.   The  program  automatically increments the seedfile string to preserve continuity and uniqueness across
           program invocations, program iterations, console sessions, host reboots and production sites.

           This program is part of the Qualcomm Atheros Powerline Toolkit.  See the AMP man page for an  overview  and  installation
           instructions.

    OPTIONS
           -D     Uses HomePlug AV rules for computing a Device Access Key (DAK) from a pass phrase.  A DAK is 16 bytes expressed as
                  32 hexadecimal digits.  This option over-rides any -M and -N options previously specified on the command line.

           -L level
                  Set security level.  The security level is encoded into the NID.  Level 0 enables  pushbutton  pairing.   Level  1
                  disables it.  This option has no effect unless a NID is computed.

           -M     Uses  HomePlug  AV  rules  for  computing  a  Network Membership Key (NMK) from a pass phrase.  An NMK is 16 bytes
                  expressed as 32 hexadecimal digits.  This option over-rides any -D or -N options previsously specified on the com‐
                  mand line.

           -N     Uses  HomePlug  AV  rules  for computing a Network Identification Key (NID) from a pass phrase.  An NID is 7 bytes
                  expressed as 14 hexadecimal digits.  This option over-rides any -D or -M options previously specified on the  com‐
                  mand line.

           -n count
                  The number of keys to generate and print.  This program prints the specified number of distinct keys of the speci‐
                  fied type, one key per line.  Normally, program output is directed to a file or a pipe when this option  is  used.
                  It is useful for creating a file of random keys.

           -o     Use  the old seedfile string.  This option prevents the seedfile string from being incremented before a new key is
                  computed.  This feature allows additional key types to be computed from the same seedfile string.

           -q     Enable quiet mode which, for this application, has no effect.

           -v     Enable verbose mode which, for this application, prints the pass phrase for each key.

           --?, --help
                  Print program help summary on stdout.  This option takes precedence over other options on the command line.

           -!, --version
                  Print program version information on stdout.  This option takes precedence over other options on the command line.
                  Use  this option when sending screen dumps to Atheros Technical Support so that they know exactly which version of
                  the Linux Toolkit you are using.

    ARGUMENTS
           seedfile
                  The text file containing the seed string.  This file may be any length but only the first 64 characters  are  sig‐
                  nificant.   If  it  is less than 64 characters then it will be extended to 64 characters after the first use.  The
                  full 64 character string is incremented, character by character, right to left each time this program is run.  The
                  seedfile  string is salted differently for each type of key requested and used to seed the SHA256 key engine.  One
                  property of the SHA256 algorithm is that small changes in the seed will produce radically different output  having
                  an extremely small chance of collision.

    EXAMPLES
           The  following example shows how to create a seedfile.  The seedfile acts as the seed for the SHA256 algorithm.  The seed
           is then salted (modified) differently for each type of key generated by this program.  The seedfile string is then incre‐
           mented  and  re-written  each time the program is executed, unless behaviors is suppressed.  Initially, the seedfile must
           contain at least one character or an error will occur.

              # echo "My Company Name, Inc." > secret.key

           The following example prints an SHA256 key on stdout.  An SHA256 key is 256 bits or 32 bytes expressed as 64  hexadecimal
           digits.   An  SHA256  key is the default output when no key type is specified.  SHA256 is a public domain standard, not a
           HomePlug AV standard.

              # rkey secret.key
              BFF0F6E3C83CE13829EA7F1F6D25042F4B05052E44C0B801EEA7CD6317F3622E

           The following command prints a new Device Access Key (DAK) on stdout using the seedfile secret.key as the seed.  The  key
           will be different each time this program is executed because the seedfile string is incremented each time.

              # rkey -D secret.key
              F084B4E8F6069FF1300C9BDB812367FF

           To observe the seedfile string, use option -v.  Notice that the seedfile string is 64 characters long and that spaces are
           significant.

              # rkey -D secret.key -v
              89F96BC11480B0E1A37441397695E676 Qualcomm Atheros, Ocala FL                              [8@Z

           The following command prints a new Network Membership Key  (NMK)  on  stdout,  instead  of  a  DAK,  using  the  seedfile
           secret.key as the seed.  Of course, one could specify another seedfile.

              # rkey -M secret.key
              B59319D7E8157BA001B018669CCEE30D

           The  following command prints 10 random SHA256 keys on stdout.  SHA256 keys were printed because no other type of key was
           specified.  Program output could have been directed to a file or a pipe for further processing.

              # rkey secret.key -n 10
              780AC153CD47AB01520B5B0246DE7B78584C0413393EDA4430773DED80DDF01A
              C7FF68DB206B1E98B8752CC95296692D45AB3DFA418F5CF5DD13479836FEDD4E
              127C8E27F4C8AC7DB27EC8F977968F64D950830B8D511B798FA5A20BE807A7E1
              79E00DBD57A0E22DCEE2C9CF29F3B7DBA95137BEDC8C76EBE3C32BFFA653D136
              AC9B8DA1B480EF0ECD7A734383DC1B0F3886D0959BAE77F30F1F16C069D2FE4A
              B1F57B211EE774B506106DEC90B7D18FE0328377FCFD9A4D523B632DFAEFF87A
              B1C1C746BDC3E45EBE65FC8D5C15D68F41E9981757024A25A4C3261A154BE6F2
              06E6CCEA8C919162D22CE2ADCB2DDFBDCBB876631CE73F48525EC27E435934E9
              F26C0636C6B2D51956D04AD73DE03BE6D112661040CB23DD74922C6E05EC7E6B
              A62219B0BBABA1DBC444574D0D73A52954847E6DB2BE44441C73E12B9F8EA6E7

           The following three commands use the -o option to prevent the seedfile from being incremented before or after the key  is
           computed.   Notice  that  a  DAK is first generated then regenerated again.  The third command generates an NMK using the
           same seedfile value used to compute the previous two keys.

              # rkey -D secret.key
              B12E8BA7B0FF31D107BE15E96EF65B86
              # rkey -oD secret.key
              B12E8BA7B0FF31D107BE15E96EF65B86
              # rkey -oM secret.key
              FAD7EA3713497F2E134299FF1118F6B0

           This utterly useless example demonstrates how to generate 10 identical device  access  keys  by  suppressing  the  normal
           string increment between each key computation.

              # rkey -oDn 10 secret.key
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86
              B12E8BA7B0FF31D107BE15E96EF65B86

           This  example  demonstrates  how  to assign distinct keys to script variables or insert them on a command line using this
           program.  Read the GNU bash manual for more information on shell scripting.  See the modpib man page for  an  explanation
           of program options shown.

              # DAK=$(rkey -D secret.key)
              # NMK=$(rkey -M secret.key)
              # echo DAK=${DAK} NMK=${NMK}
              # modpib -D $(rkey -D secret.key) -N ${NMK}

    RECOMMENDATIONS
           The seedfile is critical to the continuity and uniqueness of generated keys.  The 64 character string stored in the seed‐
           file is incremented, character by character, right to left, with each file access  unless  that  behavior  is  suppressed
           using  the  -o option.  The SHA256 algorithm generates radially different output given minor changes in this string.  The
           key space is huge and the probability of collision is statistically small.

           Be aware that two seedfiles containing the same start string will generate the same key sequence.  To minimize the chance
           of  duplicate  key  values  across  production  lines,  each  production line should use seedfiles having different start
           strings.  The length of the start string is not important but it should be different for  each  production  line.   If  a
           seedfile is lost, merely replace it with another one, as though you are opening another production line.

           Mathematically,  the  shorter the start string the longer it will take for two different seedfiles to coincidentally pro‐
           duce identical output.  From 12 to 24 character is a reasonable length but this is not a restriction.  If you  have  sev‐
           eral  production  lines,  you may want to maintain a record of the start strings used on each line in case a new seedfile
           must be created.

    REFERENCES
           See the HomePlug AV Specification for more information on encryption keys, pass phrases  and  hash  algorithms  used  and
           standard FIPS180-2 sec 5.3.2 for more information on SHA256 encoding.

    DISCLAIMER
           Qualcomm Atheros reserves the right to modify program names, functionality, input format or output format in future tool‐
           kit releases without any obligation to notify or compensate toolkit users.

    SEE ALSO
           hpavkey(1), hpavkeys(1), keys(1), mac2pw(1), mac2pwd(1)

    CREDITS
            Charles Maier <cmaier@qca.qualcomm.com> ]

    open-plc-utils-0.0.3                                        Mar 2014                                                     rkey(1)

[PREV] [HOME] [NEXT]