最終的に、Androidデバイスとlibfcを使用するNFCアダプタを搭載したLinuxホストの間で暗号化プロトコルを実装する必要があります。AndroidとLinux(libnfc)間のNFC P2P通信を開始する
私はかつてAndroidでNFCを使ったことがありません。現時点では、私の考えは、パッシブ型のピアツーピアモードでNFCを使用することです。 Linuxホストのスマートカードリーダーがイニシエータの役割を果たし、スマートフォンがターゲットである間にHFフィールドが提供されます。
私が理解する限り、createNdefMessage
は、NFC要求に反応して返信メッセージを返すために使用できます。しかし、Androidのプログラムでリクエストメッセージをどのように取得するのか分かりません。
現時点では、私は次のことを達成しようとしています:LinuxホストはNFC経由で乱数を送信し、アンドロイドデバイスは乱数を取り出して合計で応答します。
私は
package edu.kit.iti.crypto.nfctest1;
import android.app.Activity;
import android.content.Intent;
import android.nfc.*;
import android.os.Bundle;
import android.provider.Settings;
import java.nio.ByteBuffer;
public class MainActivity extends Activity implements NfcAdapter.CreateNdefMessageCallback {
protected NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nfcAdapter = NfcAdapter.getDefaultAdapter(getApplicationContext());
nfcAdapter.setNdefPushMessageCallback(this, this);
}
protected void onResume() {
super.onResume();
if(!nfcAdapter.isEnabled()) {
startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
} else if(!nfcAdapter.isNdefPushEnabled()) {
startActivity(new Intent(Settings.ACTION_NFCSHARING_SETTINGS));
}
}
public NdefMessage createNdefMessage(NfcEvent event) {
int randomNumber = 42;
// How to obtain the request message here?
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putInt(randomNumber);
NdefRecord replyRecord = NdefRecord.createExternal("edu.kit.iti.crypto.nfctest1", "app-randomness", buffer.array());
return new NdefMessage(replyRecord);
}
}
私の非常に基本的な質問には、下部にある方法でコメントされています:どのように私は、要求メッセージを得るのですか?
OK。私が正しく理解していれば、 'createNdefMessage()'によって返されたメッセージは、スマートフォンが他のデバイスを発見するとすぐに送出されます。だから、それは「火の先で、次に尋ねる」アプローチの大部分です。しかし、「反応的」なマルチラウンド通信、つまり次のメッセージが過去のメッセージに依存している場所を、どのように構築する必要がありますか?より正式には、a1、a2、...をAliceからのメッセージ、b1、b2、...とし、Bobからのメッセージとし、Aliceを開始させ、fを次のメッセージ機能とする。次に、b1 = f(a1)、a2 = f(a1、b1)、b2 = f(a1、b2、a2)などとなる。 NFCのようなものをどうやって実現するのですか? – user2690527
@ user2690527あなたは**ではありません**。少なくともAndroidではピアツーピアモードではありません。しかし、これを克服する方法があります:(1)あなたが本当にP2Pモードを使用したい場合は、Androidデバイスへの再接続を切断する(RFフィールドをオフにする)方法で相手先を設計することができます。しかし、使いやすさには限りがあります。 (2)Androidデバイスを非接触カード(HCE)として動作させ、相手側でリーダーモードを使用させることができます。 (3)あなたはAndroidを読者にし、もう片方をカードとして使うことができます(Linuxシステムに接続しているNFCデバイスがこれをサポートしている場合)。 –