Recently IBM and Microsoft showed their interest (IBM post, Microsoft post) in utilization of blockchain for internet of things development. Let's assume that in close future the blockchain technique to be implemented in smart cars overlaying road conditions or traffic data to each other.

Since the majority of honest nodes will be low-computational power devices (maybe like raspberry pi) it will be easy for adversary to perform a double-spending attack if implemented mining algorithm will not be able to bottleneck mining capabilities of devices.

  1. Is there any mining algorithm that can resist nodes with high-computational power to a certain extent, so the blockchain can be utilized in a network of low-computational power devices?

  2. From security perspective is it possible to allow only certain devices connect the network (let's say if they will somehow proove that they are limited in computational power within acceptable range defined by network)?

2 Answers 2

  1. No, not in a fully decentralized way. Hash-based methods (like what Bitcoin uses) will always be more efficient on more efficient hardware. Proof-of-stake methods can't be fully decentralized.

  2. No, hardware can't prove its capabilities in a fully decentralized way. It is possible for a device to prove its maximum distance from you using the speed of light---if you send it a ping and it replies in n seconds, you know it's within n times 300,000 kilometers of you. You can use similar hacks to prove other things---but you can't trustlessly export that proof to other users on the network you don't directly observe the phenomena, making it useless for block chains.

I read the two articles you linked to, and I suspect they're using "block chain" as a buzz word. There's no way to do fully decentralized mining without giving control of the block chain to the people with the most efficient hashing hardware.

Their plan is probably to install a key pair on each device, sign each device's public key with the IBM master key, and then tell each device to accept messages from other devices as long as those messages have been signed with a key that was also signed by the IBM master key.

For example, my IBM car GPS will send traffic updates to other nearby IBM car GPSes. Those GPSes will count my update as one authenticated vote. If other nearby IBM car GPSes send the same message, eventually the message will have enough votes to cause all nearby IBM GPSes to choose alternative routes. This is nominally "decentralized" and it may work until some IBM sysadmin signs 10,000 public keys for himself in order to get everyone off the highway so he can get somewhere quicker.

  • Regarding 2: i think you did not understand me. I meant when connecting peers send each other versions and if versions are the same, nodes proceed with exchanging verack messages. Hence maybe these devices along with a version of installed client should send their computational abilities. Therefore if a requesting peer possesses too much of computational power no other nodes will connecto to him. It is easy to get memory information both from Windows and Linux machines. So when I send such data along with version, based on it a node can either accept me or decline. Can it be a solution?
    – Nur
    Commented Jan 8, 2015 at 15:10
  • That's not a trustless solution because any node can lie about its capabilities. I have a laptop and a Raspberry Pi in the room with me right now: I can't make the RPi act like the more powerful laptop, but I can easily make the laptop act like the less powerful RPi. Commented Jan 8, 2015 at 15:14

If you require a network key then you can achieve the objective of keeping a network secure and therefore your IoT application safe and sound.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.