Ok, I just skimmed the white paper (a little better than reading just the conclusions, but not fully digesting the formulas.)
I have a question about a type of attack. Since this is an IoT coin, it is my understanding that in order to fully confirm a transaction, you should validate the full chain from the TX to the genesis transaction correct? Over time this shouldn't be a problem because a node should only have to download transactions that are missing from any tip. For example, if I get a Transaction F, and I already have transactions A->B->C in the F's chain, I only need to download transactions D->E, and validate the associated signatures for these transactions, in order to fully validate F. Once F is fully validated in this manner, I can validate/sign F to post with my transaction G.
Now, what's to prevent someone from accepting a payment and creating a massive, off-chain tangle? Maybe I spend 1-2 days, generating really long, off-net tangles.
I then submit a single transaction that relies on gigabytes of transnational details that only my Sybil nodes hold. Wouldn't the network flood with requests for information on these transactions? This may not seem like a big deal, but if IOTA is to be used with small(ish) IoT devices that can benefit from micro-payments, can't such information requests overload such devices?
Solution: When confirming a transaction, if you have to back-search a constant number of transactions, toss out the transaction. In other words, if I have to request 5 transaction generations and I'm still not on the main-chain, I can toss out the transaction.
Is my scenario even a problem?
A low-end device may be unable to process gigabytes of data within a short period of time, but it can cooperate with other low-end devices and split the burden by using techniques like
https://en.wikipedia.org/wiki/MapReduce. A M-of-N multisignature with virtually unlimited M and N will make elements of such swarms to behave honestly (otherwise they will lose money or won't get their transactions accepted). Luckily for devices which don't have "friends", it's not necessary to "see" the whole tangle if they
spend money, they can reference old transactions and wait a little longer. If they
accept money then they can explicitly warn their customers that a payment may take very long time for verification. On the other hand, if they provide a service they may spend a lot of time and create off-tangle payment channels (or even ask their owner to do it for them by using his computer) and then accept payments without worrying about the size of the tangle.