BWの初期seed

他人の情報の寄せ集めメモ。
元となるメッセージは52byte。上位ワード(4byte)から順にW[0]〜W[12]とすると

  • W[0]
    • DS固有の値(A)を1byteごとに逆順にした値(0xAABBCCDD→0xDDCCBBAA)
    • B:0x02215F10 W:0x02215F30 ?
    • mySeedFinderのnazo
  • W[1],W[2]
    • 共に、Aに0xFCを足した値(B)を1byteごとに逆順にした値(0xAABBCCDD→0xDDCCBBAA)
  • W[3],W[4]
    • 共に、Bに0x4Cを足した値(C)を1byteごとに逆順にした値(0xAABBCCDD→0xDDCCBBAA)
  • W[5]
    • mySeedFinderのTimer0とVCount
    • 上位2byteはTimer0を1byteごとに逆順にした値(0xAABB→0xBBAA)
    • 下位2byteはVCount*0x100
    • Timer0→B:0xC79 W:0xC68 ?
    • VCount→B:0x60 W:0x5F ?
    • VCountは条件次第で変動、Timer0は固有値
  • W[6],W[7]
  • W[8]
    • 1byte目:西暦下位2桁のBCD表記(例:2010年→0x10)
    • 2byte目:月のBCD表記(例:12月→0x12)
    • 3byte目:日付のBCD表記(例:6日→0x6)
    • 4byte目:曜日に依存した値、日曜から順に0〜6(例:月曜日→0x1)
    • この例なら0x10120601
  • W[9]
    • 1byte目:時のBCD表記、ただし午後は0x40を加算(例:23時→0x63)
    • 2byte目:分のBCD表記(例:30分→0x30)
    • 3byte目:秒のBCD表記(例:20秒→0x20)
    • 4byte目:0
    • この例なら0x63302000
    • 初期seed決定は起動してから約1秒後なので、結果的に起動してから約1秒後の値が使用されることになる
  • W[10],W[11]
    • 共に、0
  • W[12]
    • 0xFF2F0000

SHA-1でこのメッセージから20byteのハッシュ値を生成する。
LCGsの初期seedはハッシュ値の上位8byteを1byteごとに逆順にした値。(0xAABBCCDDEEFFGGHH→0xHHGGFFEEDDCCBBAA)
MTの初期seedはLCGsの2個目のseedの上位4byte。

コメントレス

  • 七宝さん
    • そうですね。ありがとうございます。