パリティ計算の問題


7

私は最近、多くのさまざまなデバイスでかなりのDIYホームオートメーション(RF; 433MHz)を行っています。それは基本的に、いくつかの本当にひどいリモートコントロールを備えたプールロボットです。

BladeRF SDRとGNU Radioを使用していくつかのデータを収集しました。「その他3」列は基本的にアクションですが、「その他1」はいくつかのシリアルのようで、「その他2」は複数を使用している場合のロボットを定義しますそこ)。カウントがどのような目的に適しているかはわかりませんが、おそらく範囲が広くなりすぎたときにロボットがそれを知るためです(情報が不足していますか?)。バイトとその意味を絞り込みましたが、データの正しいCRC(チェックサム)を計算できません。

古い-以下の更新をご覧ください!!

ここにいくつかのサンプルデータがあります:

<other1                  > <other2> <other3> <count > <crc   >      
10110100 00111110 10001111 11001000 00000001 11110111 01011110
10110100 00111110 10001111 11001000 00000001 11111000 01010011
10110100 00111110 10001111 11001000 00000001 11111001 01010100
10110100 00111110 10001111 11001000 00000001 11111010 01010001
10110100 00111110 10001111 11001000 00000001 11111011 01010010
10110100 00111110 10001111 11001000 00000001 11111100 01010111
10110100 00111110 10001111 11001000 00000001 11111101 01011000
10110100 00111110 10001111 11001000 00000001 11111110 01010101
10110100 00111110 10001111 11001000 00000001 11111111 01010110
10110100 00111110 10001111 11001000 00000001 00000000 01100111
10110100 00111110 10001111 11001000 00000001 00000001 01101000
10110100 00111110 10001111 11001000 00000001 00000010 01100101
10110100 00111110 10001111 11001000 00000001 00000011 01100110
10110100 00111110 10001111 11001000 00000001 00000101 01100100
10110100 00111110 10001111 11001000 00000001 00000111 01100010
added data:
10110100 00111110 10001111 11001000 00000010 00000110 01100100
10110100 00111110 10001111 11101010 00000010 01100101 10011010
10110100 00111110 10001111 11101010 00000001 01100100 10011100
10110100 00111110 10001111 11101010 00000001 01100011 10011101
10110100 00111110 10001111 11101010 00000001 01100110 10011010

変更する必要のある各要求と送信されるいくつかのコマンドの数があります。たとえば、「その他3」列は00000001ではなく00000010を読み取ることができます。

誰かが私にどこを見ればよいかについてのヒントを教えてくれるととても助かります。バイト間のXORやモジュロの計算など、さまざまな手法を試しました。残念ながら、CRCアルゴリズムのブルートフォースツールも試しましたが、残念ながらまだ成功していません。

編集:私はデータをExcelに入れていくつかの機能を追加しました(基本的に各4ビットを上からのものと比較します-最後の送信)。CRCが1度同じままであることを認識したので、それを行いました。これは、アクションとカウントの両方が1ずつ増加した場合に当てはまります。

データ

更新:

他にももっと詳細な仕様を見つけました。何時間も検索した後、ネット上の同じベンダーから出て、それが出てきたので、CRCは実際には同等です。また、gnuラジオキャプチャフローグラフを微調整し、いくつかの新しいデータを収集しました。上記のデータを無視して、こちらをご覧ください。

other 1> other 2                > other 3> other 4    > parity
10110100 001111101000111111101010 00000001 011110101001 0101
10110100 001111101000111111101010 00000001 011110111001 0110
10110100 001111101000111111101010 00000001 011111001001 0011
10110100 001111101000111111101010 00000001 011111011001 0100
10110100 001111101000111111101010 00000010 011111101001 0100
10110100 001111101000111111101010 00000010 011111111001 0011
10110100 001111101000111111101010 00000010 100000001001 0011
10110100 001111101000111111101010 00000010 100000011001 0100
10110100 001111101000111111101010 00000001 100000101001 0100
10110100 001111101000111111101010 00000001 100000111001 0011
10110100 001111101000111111101010 00000001 100001001001 0110
10110100 001111101000111111101010 00000001 100001011001 0101
10110100 001111101000111111101010 00000010 100001101001 0101
10110100 001111101000111111101010 00000010 100001111001 0110
10110100 001111101000111111101010 00000010 100010001001 1011
10110100 001111101000111111101010 00000010 100010011001 1100
10110100 001111101000111111101010 00000001 100010101001 1100
10110100 001111101000111111101010 00000001 100010111001 1011
10110100 001111101000111111101010 00000001 100011001001 1110
10110100 001111101000111111101010 00000001 100011011001 1101

そして、ファンシーエクセルとして再びここにあります:

ここに画像の説明を入力してください

誰かがそのパリティを計算する方法を知っていますか?データなどを分割して通常のパリティ計算を試してみましたが、残念ながらまだ成功していません。


1
チェック値以外に変更を示しているのは最後のバイトのカウントだけなので、ここには十分な情報がありません。したがって、前のバイトの影響とアルゴリズムの静的な開始値の違いを区別することはできません。推測してテストすることもできますが、理論があまりにも美しくてあまりありそうにないこともありますが、特定のデータから本当に逆にできるのは、チェック値の作成における最後のバイトの役割だけです。
Chris Stratton

2
@ChrisStrattonあなたは正しいです。他の値を変更するデータを追加しました。役に立ちましたか?
オメガウイルス2017

1
いいね。私は驚かれますが、いくつかのローリングコードがある可能性があります。古いキャプチャの単純な再生が有効かどうかを確認しましたか?これは自分で答える必要があると思いますが、参考になるでしょう。
Sean Houlihane 2017

@SeanHoulihane最初は私もそう思った。しかし、いくつかの失敗した試行の後、私はなんとかデータを再送信し、それが受け入れられたため、ローリングコードなどはないと結論付けました。つまり、アクションの「スケッチ」全体をキャプチャして再生することは可能ですが、その数は常に適切に増やす必要があるため、機能しません(まだ受け入れられる量には違いがあります-言ったように、範囲の問題などでデータが失われたためと思います)そうでない場合、ロボットは「同期」を失い、ドッキングステーションに戻してプラグインする必要があります。
オメガウイルス2017

1
@MikaelFalkviddこれは良い考えであり、通常、可能な場合は私の出発点です。残念ながら、これはヨーロッパのデバイスであるため、FFC IDまたは類似のものはありません。
オメガウイルス2017

回答:


5

ああ、どうぞ私には質問しないでください、私はそれを理解したと思います。

みてみましょう:

ここに画像の説明を入力してください

基本的には、データをそれぞれ4ビットのパケットに分割します。次に、1番目、2番目、3番目、4番目の文字を個別に連結します。これは、1、2、3、および4列で確認できます。その後、あなたはそれらのそれぞれの1を数えます(1の数はそれらのそれぞれの横に書かれています)。それらが偶数の場合、パリティビットは0であり、奇数の場合、1です。したがって、終了する前に、前の結果(!)に2を加算する必要があります。それは毎回一致し、自分のフレームをそのように生成することに成功しました。問題は解決したようです。完璧です。貢献してくださった皆さん、ありがとうございました。


1
つまり、チェックニブルは、先行するすべてのニブルのXORです。
Chris Stratton

1
@ChrisStrattonこの質問を許してください、しかし正確にXORする必要があるのは何ですか?カテゴリから各パリティブロックを試しましたが、うまくいきませんでした。
オメガウイルス2017

1
最初はゼロであるアキュムレータに各ニブルをXORすると、答えが得られます。これにより、その位置にある1の数が奇数の場合、各ビット位置に1が残ります。
Chris Stratton

1
単なる最適化- 要件を自分で見つけました:-)
Chris Stratton

@ChrisStrattonそうですが、XORアプローチは明らかに正しいものであり、私はそれをPythonで簡単に実装しました。とにかく、最後の+1はまだ必要でした。なぜなのかご存知ですか?
オメガウイルス2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.