4 ms·
> To reduce the amount of harmful interference generated, USB3 links use a technique called scrambling, in which data is XOR'd with a fixed pattern before trans
by ben509 6y ago
> To reduce the amount of harmful interference generated, USB3 links use a technique called scrambling, in which data is XOR'd with a fixed pattern before transmission.
So I can take that pattern, repeat it a few million times, and then if someone transmits it (as simple as saving it to disk), it turns their USB devices into transmitters.
- jleahy 6y agoCorrect, and these attacks exist and will cause a link to go down. It’s a problem that was considered in the design of both 10G ethernet and PCIe which both use similar mechanisms. Generally a key defence is the maximum packet size (you can’t keep your evil stream aligned with the scrambler) along with the huge pattern length (for PCIe g1/2 and USB3, 10GE and PCIe g3 works differently) which means that the amount of data you’d have to send is just too large.
- tinus_hn 6y agoProbably too much work to do in that context but QR codes solve that by having multiple possible XOR patterns and choosing the one that generates the best output.
- jleahy 6y agoActually not too much work. Some protocols (I can’t recall which, none of the above) work by sending either the data or its inverse along with an extra bit saying whether it was inverted. Very easy in hardware but has nasty error amplification (an error in that bit causes many other bits to flip), which may or may not be an issue.
- tinus_hn 6y agoNot sure how that really helps but it does mean you have to look at all of the data before sending it.
- jleahy 6y agoYou split your data into chunks, say 8-bits. The main thing is that you can guarantee there will be a transition every N bits and you can guarantee that the average number of ones and zeros is the same (you can't have a DC component in your signal due to AC coupling). For example let's assume that the block size is 4-bits, if somebody wants to send 0x0000 rather than sending this: 0000_0000_0000_0000 You'll instead send this: 10000_01111_10000_01111
- m463 6y agosounds sort of like grey codes in a different domain.
- willis936 6y agoOnly if certain other conditions are met. The PCB routing and cable do not have to not be tightly coupled differential pairs (this is almost never seen in practice). The data you’re trying to transmit falls within the line code. Keep in mind only 1/4 of all possible bit sequences are even available in 8b/10b.