Hi, I'm Alan Cecil and with me today I have Dan Pichero, we are presenting you're doing it wrong We're talking about vulnerabilities that exist in virtually every device out there in the IOT world That's a critical issue that we need to talk to you about because random numbers are used everywhere Before we get too far though, let's talk a little bit about random numbers and why they're so important to security Numbers of course are kind of how computers work So a random number can be a stand-in for all sorts of things that we don't normally think of as numerical So encryption keys authentication tokens and are a lovely friend business logic but one of the things you're going to notice throughout this presentation is that the vulnerabilities that we're going to describe here have a lot to do with the specific logic of a particular application In a way that is hard to replicate on Mac so a lot of the vulnerabilities that we'll discuss here are kind of specific to particular applications or frameworks and Aren't necessarily the kind of canned exploit that you might expect from like a widespread CVE One of the problems though is that computers are notoriously bad at making truly random numbers And that's because computers need to be deterministic if you did math and every time you got a different value out of pi Or you had a Pentium 2 processor that just kept messing up floating point numbers You'd have problems and we have seen this in the past so we make computers to be very deterministic However, sometimes you need stuff that isn't deterministic You need some some entropy and that's where our hardware RNG comes in. That's its job is to Make entropy to make a source of randomness to it be a seed for some way of getting random numbers So that solves the problem, right? Matt's actually a good time to bring up that there's two major kinds of random number generators that you'll find a pseudo random number generator And a true random number generator You might think from the names of them that you want the true random number generator or the TRNG That that's the good one and pseudo ones are the bad ones But it's not that simple really the distinction is only that one is made in software and one is made in hardware And the names could really lead you astray here I particularly hate the name true random number generator for the hardware ones It sort of implies a kind of quality behind them. That isn't necessarily present I suspect this naming comes from big RNG as a propaganda term But in any case the pseudo random number generators also come in two major forms the cryptographically secure random number generators or Cispinger guh for short and regular ones So the regular ones are things you'll find in like libc random or the percent twister that are meant to be fast They're really efficient. They're just pieces of software in both cases. They were work basically the same though You take an initial seed number that could be any length somewhere between the 32 bits all the way up to like 128 bits and then you stretch that entropy out indefinitely into the future you could produce some the stream of Seemingly random numbers from that seed right so it's an entirely predictable set of numbers given that initial seed And so the distinction between a cryptographically secure random number generator and a not secure one is basically that the Regular ones like the percent twister or libc random or any number of other common implementations We'll leak information about the internal state and therefore the seed as you go along So there's really no secure way to use those. There's they're never safe to use for security critical pieces of information anytime you actually need Like secure information like a crypto key or something like that You should definitely be using a CSPR and G and then the security of the hardware RNGs are something that we investigated in this research One unfortunate part about the design of these hardware random number generators is that there's not a lot of information Known on about the details of how they actually work. They're basically black boxes So if you wanted to find out about how your Favorite IOT device the hardware random number generator that actually works They're you know, you're kind of out of luck one notable exception is the STM 32 want to give them a shout-out from STM ST microelectronics They actually have a really great information about the details of the inner workings of their RNG as well as a proof of correctness a Kind of proof of the good quality random numbers that came out of it But there's two kind of basic Digital designs that you'll find for how to produce random numbers in hardware at least in a low-cost way that you'll find in IOT devices Analog circuits and clock timings. The first one is an analog circuit So you're probably more familiar with digital circuits that is circuits that are gated by a clocking function Analog circuits are kind of the opposite. There's no central gate by a clock so what you can do is you set up a analog circuit that sort of looks like the diagram we have here on the top right and There's a bit that flows back and forth between this not function So it's either a zero or one and a zero and a one kind of back and forth again It sort of spins in this infinite loop going back and forth between zero and one at a function at a rate rather that Is not exactly a random but sort of arbitrary So if you were to pull that if you say Ask the analog circuit and any given point in time to you know find out what the bit is The value will be pretty random. I mean that's a pretty good way of designing a hardware random number generator there's also a method where you're using multiple clocks at the same time to Get a difference between the two a delta between the measured Differences between those clocks if you had two clocks that were derived from the same source The result should in theory be identical So you would always get a one or a zero Depending on when you sampled it But if you allow them to run freely and measure the delta between the two you can get a pretty normal distribution of differences between the two sometimes this happens on On situations on it that you wouldn't expect where the designers didn't deliberately do that one of them happens to be the original Super Nintendo they had a 21 megahertz clock for the central processing unit and a 24.576 clock for the APU the audio processing unit the result is that speedrunners playing super Metroid to have to deal with Random timings due to moving data across the bus when going through door transitions Sometimes these random situations happen on unrelated devices and in a hardware random number generator you're taking advantage of what just sometimes happens accidentally and Using that deliberately to get random numbers out of it There are some issues that come up if you're calling too often if you're just running too fast You're calling too frequently for instance that output Call from that analog circuit method if you're calling it too often You're gonna get the same number twice in a row because you didn't give it enough time to transition the same thing could happen with The clock method if you're calling it too frequently you could also end up with accidental syncing It could just be that both of your clocks happen to align so they're both operating at exactly the same offset There's no guarantee that you're going to be perfect But it's usually good enough that it's fine as long as you're not calling it constantly How IOT does RNG is interesting most new IOT system on a chips have a hardware RNG device built into them as of 2021 that hardware RNG is an entire peripheral devoted to just RNG so it must be secure, right? so the thing about IOT and programming on IOT devices is that there's not really any operating systems to kind of smooth over the errors that you might make Typically you just run C and C++ on bare metal so if you needed a random number for a security critical piece of information like a crypto key you just call the hardware RNG peripheral directly usually through a how function a Hardware abstraction layer function and something that looks basically like this This of course is pseudo code, but it looks basically the same across basically every SDK and operating system So there's the how get random number function and there's kind of two parts that we really care about here for one There's an output variable the out number. That's the actual random number that we care about if you're familiar with C It's an output variable basically you Send it a pointer to the number and then the function will overwrite the value on that pointer And then the actual return code which has an error message the error message that'll tell you in case something went wrong along the way There's lots of things that can go wrong when you are talking to a piece of hardware, right? The peripheral might be broken or something went wrong over the bus Maybe there are random number generator peripheral just wasn't ready yet The maybe the relative positions of Jupiter and Saturn for all we know are just not aligned in any case An error can occur in the calling of this random number generator function And it'll let you know about that in the return code So we want to ask the natural question how many people out there in the wild actually check this error code So as it happens almost nobody actually checks the return codes of these how RNG functions basically everybody out there just sort of makes a call to the random number generator peripheral and just Uses whatever result that happens to give you you can see two results here from free RTS Which is a popular IOT operating system and the MediaTek 7697 You could see both of these calls here are basically what we looked at earlier There's a return code that you're not seeing that it's checked and then the output variable that's put into it So maybe you're wondering alright, so you you know didn't check the return code of the how RNG function You know, what's the worst that could happen? undefined behavior We don't know what will happen and that is a pen tester's Favorite phrase the worst that can happen might sound like it's the number zero and in fact We have seen examples of this the xkcd joke that you always have to reference when you're talking about random numbers is That you ask for a random number and it always returns a static value a constant That isn't quite what usually happens, but it's not far off We've seen large swaths of zeros in a one gigabyte file of supposedly random numbers and Even in our own implementations when we were trying to do it properly We ended up with results that had large quantities of zeros in them But that's not the most insidious one the worst is where you have partial entropy it looks like it's random But it isn't as random as you thought it was a good example is you make a call You get a 32-bit unsigned integer back It has four bytes of random numbers and the first call looks fine. You call again. It still looks okay Then you call a third time and you get zeros and you call a fourth time and you still get zeros But if you're not looking carefully enough you might not notice that you got a whole bunch of zeros in your calls This partial entropy can be really tricky because it substantially Reduces the actual randomness that you're working for the strength of the random number that you're getting It might seem like this is Not an issue, but this seems to happen pretty often So this is actually how this entire research project got started We do a lot of IOT engagements at Bishop Fox under what we usually call a product security review We like to say that if it breaks when you drop it, it's a product security review And so one time we had a client that was developing an IOT device that does a lot of cryptography in it that was kind of like a security device and I was reviewing the code and looked at the code which used a lot of a random number generation in the process of doing a lot of cryptography and Was curious about you know how it did random number generation on such a tiny low-power device and it turns out that there was a hardware random number generator on the sock that our client was using and On a lark I sort of asked to see like hey What a what is the quality of the random numbers coming out of this thing? I you know was sort of curious. I hadn't actually Seen the output of one of these hardware random number generators previously and I didn't really expect it to be bad I was thinking that like you know the hardware random number generator surely is the gold standard for RNG right and so when we got the results back I you know we ran it through some statistical randomness tests and it failed basically all of them And then upon further inspection looking at the actual like binary files like a couple of gigabytes of Output from the RNG the large swaths of it were just zero Surely I thought that this was like a mistake that this can't have been right So we then embarked on this sort of longer journey to investigate to see was it just a single buggy chip Or was it some crazy buggy code and this entire thing kind of blew up from there So you might think that encryption keys of zero or about as bad as you can get right I mean surely can't get worse than that Well, I'd like to introduce you to Petro's law If I could have one eponymous law one law named after myself help me out here Defconn It would be this it can always be worse no matter how bad you think it is it can always be worse So what could be worse than encryption keys of zero? Uninitialized memory that's what so take these three lines of pseudocode for example These are pseudocode of course But if you just hop on to GitHub and look around you'll find lots of examples of this in the real world So you declare but not instantiate a number that you're going to be using as your holder for a random number This is declared on the stack You then pass this to the how random number function. However, if the how function works in such a way that it Doesn't perturb the random number variable when there's an error condition like it doesn't set it to zero say Now what'll happen is when you go to use it later on the value will just be whatever happened to be present in RAM Prior to the call so this can actually happen quite regularly in the real world too For instance, if you're doing some cryptography with like a Diffie-Hellman key exchange This will involve generating a random number and then sending it over the network to a potential adversary So this is something that's quite realistic in practice So let's talk about some real-world instances in 2019 a study against over 75 million publicly available Certificates found that over 435,000 of them were vulnerable to attack in the study They specifically called out lightweight iot devices are particularly prone to being in low entropy states And I'm not saying that our research here Directly points to what they found but it's a pretty clear link that When you have this many devices that are producing such low entropy results, it seems pretty likely that this was what they found So you might have thought this was gonna be a very simple case of just simply blame the users, right? There was pesky users aren't Checking the return codes and we just need to Make sure that they're calling the functions correctly. Well, it's actually not quite so simple So take the this for instance This is a some pseudo code at the top here. The this is from the media tech 76 97s Documentation you call the random number you check if the status code is not equal to okay And then you're sort of handle the error Well, the handling of the error comment right there is doing a lot of heavy lifting because when you need a random number for some Security critical code you can't just simply move forward without that random number It's sort of important to the core thing you're trying to accomplish there So generally speaking you're kind of given two options one is to spin loop So you can just kind of while loop call the random number generator function again over and over and over again until you get an Okay status basically you're going to use a hundred percent CPU indefinitely Maybe forever if the RNG peripheral is broken waiting for a result. That's not very good But the second option is just to quit out entirely kill the entire process or like if you're in the networking stack if you're trying to make a TLS key for a TCP connection that you're in then it's going to involve killing the entire TCP connection like that's not a very good option either Both are so unacceptable that it really leaves developers with only option three which is YOLO You can't just spin loop because it'll lead to broken buggy Useless devices same thing with quitting and killing the entire process and starting over This is going to make a device. No one would want to buy so we force users into this win unwinnable situation RNG and IOT is fundamentally broken and it's not the fault of the user So let's talk about the right way to RNG and the right way to do this is to use a cryptographically secure Pseudo random number generator. It's a mouthful, but a CSP RNG has some distinct advantages It never blocks execution. It has API's calls that don't fail It pulls from multiple entropy sources more than that in a second It always returns crypto quality results due to stretching out the amount of randomness that you have in short It's a much stronger system than just relying on a single source of entropy The way that the CSP RNG sub system works is you start with a number of entropy sources So these can include the hardware random number generator But also lots of other things that an operating system might have access to such as interrupt timing from various devices networking Received times the like tiny nanosecond received times has a quite a bit of entropy them to the network And you XOR them all together into this big entropy pool So what's important to know about this is all of them are XORed together So that it's not sufficient to break just a single one of these entropy sources in order to predict the output of the random number generator An attacker would need to simultaneously predict all of them. So that's very strong Additionally, what you can do is then read from the entropy pool by a cryptographically secure random number generator These are typically just like a hashing function like a Linux kernel will just MD5 the entropy pool And then in order to produce more numbers afterward MD5 the last output with the entropy pool itself So you can kind of chain basically key stretching your way out to produce a Functionally infinite amount of entropy from a static amount also because we can study these hashing functions like offline. We're very sure about the Strength of the results. So this also makes remediation tricky here You see it's not a simple case of you know You zigged where you should have zagged where there's a bug in a piece of software somewhere and whoever made the software can just Kind of fix that bug. We patch it and move on with our lives This is a case of a missing feature and one across a very heterogeneous Landscape of devices and pieces of software The most likely place that you'd implement a feature like this a CSPRNG subsystem is one of the emerging IOT operating systems something like free rtOS contiki ng write OS or one of many others We'd highly recommend using one of those if you're making a new IOT device from scratch Because the individual device SDKs seeming like they're unlikely to get this kind of a feature Those SDKs are usually very thin filled with example code That's mostly around hardware enablement and not so much around making a full device end to end So yeah, this is gonna be a tricky Remediation process now this vulnerability might be with us for some time This is how RNG on IOT devices should work, too But right now it doesn't and The rest of this talk is all about convincing you why you really do need a CSPRNG subsystem It's absolutely critical to have this now Let's talk a little bit more about using hardware RNG to seed an insecure PRNG because this will matter A lot when we start moving into the rest of this talk Nobody codes from scratch. We were talking really about blaming the users for doing it wrong Well, if you're a user and you're grabbing reference or example code and that reference library or that code that you're working with has Vulnerabilities it propagates those vulnerabilities out and One of the places this shows up is some IOT devices and operating systems use the hardware But only to seed an insecure libc pseudo random number generator What that looks like is you're getting a nice Potentially random number from the hardware random number generator. You're using that to seed libc But everything after that is not necessarily Cryptographically secure you're not really using the hardware even though you might think you are this shows up in the media tech link it 7697 and Specifically in the contiki in G. I'm gonna let Dan describe this in a demo. We have for you So for this demo we built an IOT security camera device It takes pictures every few minutes just like a real security camera and post them to a publicly accessible website So the only thing keeping an attacker from being able to view your photos is that each file is named to this long Random file name here chosen by the camera now before you go thinking that this is Unrealistically vulnerable. This is how discord works and lots of other applications like it anytime you take a photo and send it to a friend Over discord. It's publicly accessible of the long random file name is the only thing that's keeping people from seeing your photos Our device however is built using contiki and G a popular IOT operating system When you call the operating system to get a random number It will use the hardware RNG on board But only to seed the insecure libc ran function So we don't know what the seed is, but we don't have to because we can derive it So suppose one day you take a photo with your camera and post it on social media Well, what a cool camera you bought how fun But what you didn't know is that an attacker can use this file name to derive what the original seed was that generated it That's because that's how the libc ran function works Our attacker here uses untwister to find the seed once they have They can use that seed to determine every past and future value from the RNG So attacker can just plug in some of those numbers back into the camera website and view every photo that the camera has ever taken Even if they've never been shared before All right, so let's have a word about exploitability This comes up a lot anytime you give a talk about random number generation or crypto stuff is how exploitable is this really and the answer Here is very exploitable, but it's not going to be a canned exploit You're not going to see a you know, you're doing it wrong dot pie that just sort of exploits things in the wild It's going to have to do with the particular business logic of the device that you're speaking to It's going to be very particular to individual Internet of Things devices, so there's not going to be just like a simple CV that you can kind of apply Universally across the board to you know every device that comes with one asterisk one possible exception here And that's with asymmetric keys. You see one of the things that often causes the hardware RNG functions to fail is calling them very rapidly in succession So you call them too quickly and then it runs out of entropy and just starts giving you zeros So one really common way to make that happen in the real world is to make a 2048 or 4096 bit RSA key right in order to get that many bits from the hardware RNG you're going to need to kind of call it in a loop in succession very quickly and Those sorts of keys are very sensitive to low entropy It's not like an AES key where if you know, you're missing 32 bits off of 128 bit key You're still you know, probably fine Whereas with RSA keys, that's not the case In fact, there's a different talk at this DEF CON going on right now called the mechanics of compromising low entropy RSA keys We did not plan for this that was just a thing that sort of happened so this is actually a thing that you can check for empirically you can look at the RSA keys coming out of IOT devices and See if they are of poor quality or not And that's the sort of thing you can do from the outside of black box as well So if you're a pen tester and you have an IOT engagement coming up How you're going to actually exploit this is going to depend greatly on whether it's a black box approach Or whether you have the source code to the application of the device itself As a black box approach, it's going to be much trickier You're going to want to look at the output of the RNG from however the application is using it The easiest way as we mentioned is using the asymmetric keys If the device produces an RSA key or a certificate of some form Then you can look at those cryptographically to see if any known attacks work against it That's probably going to be your best bet Second though look for any opportunities to tax the RNG So any opportunity for the attacker to influence how often the RNG is being called So for instance if the device is producing some ID value And that is done at the request of a user then try you know Requesting that very very quickly and see if the numbers start becoming zero or if they're lower entropy other than that trying to actually measure the entropy of Values that come out of an application can be very hard because very often it's going to be Permuted in some way you're not going to get the raw hex values that come out of the RNG Typically it's going to be produced as like a a six-digit pin or something like that and in order to perform statistical analysis on The kinds of output of the RNG you're going to need a you know a very large sample size like a gigabyte or so and In order to get a gigabyte of you know six-digit pins. You're gonna have to make a lot of calls So that might actually be very difficult in practice With source code however things become a lot more visible You can look into to see how the hardware RNG is called and see if the return code is being ignored I hesitate to recommend actually implementing a CSP RNG subsystem on your own at this state Since there's a lot that can go wrong there. There's a lot of moving pieces that go on there There's certainly a lot that you can mess up, but at least consider it if it's critical enough Okay, you've done everything right your spin looping you're blocking until the hardware random number generator gives you valid non-zero results or Validated that you've used every library correctly and that your libraries aren't written in a bad way that are perhaps just seating libc You've validated all of the code you're using Surely you've got it right now, right? Nope, there's still some usage quirks. You're still likely going to do it wrong. In fact, you will do it wrong This is the same level of difficulty as trying to write crypto code and for the most part We know not to try to write our own crypto code. It's it's kind of a a well-known law Well, this is my law. My law is don't write your own RNG code. You will do it wrong now You might Potentially have some documentation Maybe if you can find it on some usage quirks you run gonna run into for instance the LPC 54 628 has a warning on page 1106 out of 1152 that says when you're calling it you have to throw out 32 results Use one and then throw out the next 32 results and repeat the process It is the only way to guarantee that you're getting proper random numbers out of it But how would you know if you didn't sort through a thousand page document? And if you saw this code written down and you went through the comments unless they specifically called out why they were doing it You would think that this was buggy code. This doesn't seem sane You can't try Writing RNG code on your own. It's as bad as trying to write crypto code and even worse This is absolutely a situation that emphasizes you can't blame the user for this There's no one that's gonna get this right One of the things we've touched on in this talk are hardware dev kits that So see silicon on a chip vendors Release to allow developers to debug and flash their devices an IOT developer is going to build their advice around an SOC and They'll be writing their code in C or C++ or something similar on a PC and then flashing their device and testing it The dev kits provide a variety of different features for testing things and each vendor does it a completely different way For instance, this is a spark fund board that is using an nrf based SOC and it has a USB port for debugging and flashing as well as an SD card each vendor implements it completely differently And for instance, this is an older version of an STM 32 This particular design has a debugger at the top that can flash the device The actual device you'd be flashing is this SOC down here This portion of the board is still a dev kit. It has all of the functionality in that chip Exposed on the pens on the sides But you can do some interesting things you could flash this this chip and debug it with this portion And when you're satisfied to the device you can actually snap off this entire upper portion Sometimes you'll do this because you'll develop your device and then use the dev kit itself one of these designs that we did on the side on my task spot project was with this Cyprus PSOC 5 based board to flash this device you plug this end into a computer and to actually use it You're using a completely separate USB port on the other side in our case We connected the actual dev kit to a board. We manufactured this was made by total in the task spot community this allows us to connect to a Video game console and pretend to be a controller as in it for instance You can also just make your own hardware that doesn't have any of this extra debugging functionality at all That's what we did with this task team 32 board made by Onosaurus same concept This allows us to connect directly to a video game console and pretend to be a controller We just have cables that go from ethernet to say a Nintendo or Super Nintendo but in this case we've taken the SOC right here and Incorporated it into a board of our own design and that's generally what a IoT device developer is going to do now There are a variety of different Advantages of doing that one of the boards we worked with was this newer version of an STM 32 that incorporated everything over just a single USB port Rather than splitting it out like the PSOC 5 did this has a USB serial interface It has debugging functionality. There's very different ways that you can talk just over USB This was a really interesting to work with And ultimately the bulk of our research time was working with devices like this to try to access the hardware RNG that was on the SOC This particular device had really good documentation So a lot of credit to ST micro for that they even went so far as to provide a proof of their randomness and When we started trying to reproduce the results we actually ran into several problems One of the issues we ran into was that even with a reference library and code and documentation We still ran into problems with not properly spin locking and blocking execution of the program For instance in our early tests. We were using something called bite circle just an analysis tool that allowed us to Throw the data at this this program and it would show the bite distribution in a nice circle So out of 255 possible different combinations What we found is that all of the values we were getting were very low numbers for some reason When you looked at the data in a file it looked like it was properly random But what we found was that we were actually calling it too frequently We weren't blocking properly and as a result We were calling the hardware RNG too frequently and and starving it and getting bad results as out of it as a result One of the other challenges we ran into was some of the devices made it very difficult to even get the data off of Media tech could be flashed over USB, but to actually exfiltrate the data We had to use this crazy method over wireless and do various get calls It was pretty complicated and really the bulk of our research was just spending time trying to get accurate numbers out of these devices I Bring up all this complexity because I want to highlight Duango AC's role as it were Don't try to make your own hardware RNG code. It's as bad as writing crypto code. I've said it before But I can't emphasize this point enough We spent a long time trying to do this and still managed to mess it up several times in the process IOT vendors really have it rough because if they do release a device that is standalone like this How do you flash it in the field once you've released this you've broken off the debugger? There's possibly no debugger on it at all There's a lot of hardware out there that possibly has badly implemented hardware RNG that vendors simply can't fix So to pen testers this is going to be a perennial finding that will pop up for years to come because there's already Hardware out there that's potentially using insecure RNG methods and it's not easy to fix Okay, so let's take a look at what the quality of the entropy looks like coming out of these hardware random number generators is raw No more bugs. No more silly usage quirks and library shenanigans Let's look at the actual numbers coming from the hardware RNGs themselves. Are they good? Are they bad? so we Ran a bunch of the RNGs through some statistical analysis and we've got some cool results to show you we're looking at here is a histogram for the MediaTek 7697 that is a Diagram of all bytes and how often they occur zero to 255 from left to right So what we should see is basically a flat graph very easily every bite should occur just as often as every other bite Maybe with a little bit of fuzziness at the top But that's not what we see what we see is this obvious sawtooth sort of pattern that occurs down the line And if there's two things that don't go along well together It's obvious repeating patterns and crypto keys Do you feel comfortable using this for your encryption key like I for sure don't Next up is the Nordic nrf 5280 40 For this there's this obvious repeating 12 byte pattern of just zeroes. There's a zero zero zero It's a little bit hard to see in the picture there. The highlighting doesn't capture the third zero But this happens every in hex 50 bytes And that's super bad obviously repeating patterns of any kind is bad But especially fully zeroed bytes Coming from the Nordic board was something that we saw that kind of stood out and made it fail all of this Statistical randomness tests there forward This example was so egregious and so peculiar that we thought for sure for a really long time that it was just our Instrumentation that was at fault, but we don't think it is for three reasons one We spent a really long time Investigating our code trying to figure out how this could possibly be happening from it and never figured out how But two it's a 12-bit pattern Which is a very weird if it was exactly one byte a null byte Then you know perhaps you'd think that it's just a null terminated string was kind of getting copied around incorrectly somewhere But exactly 12 bits is really curious and also the the amount that it jumps by 50 bytes Sometimes it'll actually jump by a little bit more than 50 bytes Though which kind of offsets things a little bit So there'll be like maybe 80 bytes or something like that in hex and then it'll kind of Continue on the pattern from there, which also wouldn't really make sense as an inconsistency in our instrumentation so aside from just a Distribution of values and side from just taking all of the bytes and putting them on a graph and seeing how frequent they are You can do a lot more statistical analysis There's a lot of tools out there including die-harder that you can use on large data sets to see if there are repeating patterns And we relied on this a lot when we were doing our omen implementation on the STM32 When we first started we were failing all of the tests and it took us a while to get the code right We thought we were spend looping properly. We weren't it turns out. It's very difficult to do this properly Even when you think you know what you're doing Once we got through all of the other tests We still had one of the die-harder tests that continued to fail, which was the RGB minimum distance test So the minimum distance test what it's doing is it takes a bunch of random numbers interprets them as integers and plots them in n dimensional space and then calculates using a simple algorithm What the minimum distance between any two of those points are and it should fall within expected parameters What this is doing really is it's checking for repeats or nearly repeated values since any repeats would cause the Minimum distance to become smaller than it like normally should be so you're seeing here in terms of a failure as a p-value of Exactly zero which means that it's a very confident that this should not have occurred Randomly or the chances of it having occurred naturally is very small At the same time you're watching this we'll be releasing our code that Gathered and analyzed the hardware RNG entropy itself It's nothing terribly special, but took a long time to get right and working across a bunch of IOT dev ports And while we don't think that there's any errors that would have impacted the results Consider that even if it turns out that there's a bug in our code What does it say that to computer security experts spent months studying and analyzing RNGs and still couldn't get them to work properly? And what does that say about the state of IOT security more broadly? Okay, so what are the conclusions we've come to after talking through all of this? The first is that this affects the entire IOT industry. It's not a single to vendor. It's not a single device. It's not a single particular quirk this is widespread and If you take nothing else out of this talk The point we really want to make is that the IOT world needs a CSP RNG subsystem This can't be fixed by just changing documentation and blaming users. You really need RNG code That is well vetted and you should consider it dangerous to write it on your own It's just like crypto code and also you should never use entropy directly from the hardware You don't know how strong or weak it might be as we just showed you Okay, so what can you actually do about this? Well, it depends on what camp you're in if you're a device owner keep an eye out for updates IOT devices aren't the best in general with software updates And you're gonna want to make sure that yours is ready to take them when they're available IOT device developers. We'd highly recommend using one of the emerging IOT operating systems We don't have a strong preference for one versus the other at this point But if you're making a new device from scratch or maybe even just updating a current one We'd highly recommend using those rather than writing raw C on the bare metal yourself If you're an IOT device manufacturer or an OS developer themselves Implement one of these CSPR and G subsystems. That's the only secure way to do it. There isn't a way to get around it You might even consider deprecating or straight-up disallowing users from using the hardware RNG raw itself And if you're a pen tester keep an eye out for this because it's going to be a perennial finding for years to come. I Am Alan Cecil de Wango AC. I'm Dan Petro and thanks a lot


The history of all hitherto existing society is the history of class struggles. Free man and slave, patrician and plebeian, lord and serf, kill master and journeyman, inner world, oppressor and oppressed, stood in constant opposition to one another, carried on an uninterrupted, now hidden, now open fight, a fight that each time ended, either in a revolutionary reconstitution of society at large or in the common ruin of the contending classes. The communists disdain to conceal their views and aims. They openly declare that their ends can be attained only by the forcible overthrow of all existing social conditions. Let the ruling classes tremble at a communistic revolution. The proletarians have nothing to lose but their chains. They have a world to win.


Welcome to All Hands Update, I'm Petty Officer Tyrell Morris. The Navy Exchange Service Command, or NEXTCOM, launched a new and improved web store for all of your shopping needs. The new site is fully integrated, user-friendly, and designed with a more modern look. The online store also offers many new features, including lower standard shipping rates, mobile shopping with your smartphone or tablet, and an enhanced product search with new filters. The website changes are the beginning of a multi-year project for NEXTCOM. Further changes will include a similar update for Navy military clothing shopping, and the ability to check online if your local NEXT has items in stock. For your online shopping needs, visit the Navy Exchange website.


Okay, I know I promised that we'd get to see Confederate Nazis get their teeth kicked in here, but that's going to take some time. First, we have to establish that these pricks do in fact exist, and that they do in fact deserve to get their teeth kicked in. A quick overview for the newcomers, though I'm not sure why the hell you'd be watching this if you hadn't seen Part 1 yet. This alternate history timeline, called Southern Victory, or Timeline 191, diverges from our own in 1862. During the American Civil War, a Confederate officer lost a copy of his orders, called Special Order 191, and it was picked up by the Union Army. This allowed the Union to predict their army's movements and halt their invasion of the North. In this timeline, the orders were never lost, and the CSA was able to successfully invade the North, forcing them to recognize their independence. After this, the CSA managed to annex Cuba, Puerto Rico, and the Mexican states of Sonora and Chihuahua. This led to another war with the US, in which it was crushed by the CSA, France, and the United Kingdom. Over the next decades, the US cozyed up to the new German Empire, and so, when the Great War started, they joined on the same side. After several hard years of fighting, France, Great Britain, Russia, and the CSA, known as the Entente Powers, were brought down and the Central Powers were victorious. Because of this, Russia never fell to the Bolsheviks, the US took territory from the CSA as well as Canada, and Germany achieved hegemony over most of mainland Europe. In brief, the opposite side won World War I here. Overall, I found the timeline to be fairly consistent and realistic, despite a few issues. But I've only covered the first four books in this series so far. There are seven more to get to. As a reminder, I'm examining all the changes to history from our timeline and rating them as likely, plausible, unlikely, or impossible.  Also, these are just my interpretations and opinions, spoilers ahead, yada yada yada. With the occupation of Canada, the United States controlled territory from the Arctic Ocean to the Gulf of California, and they were now the uncontested greatest power of the Western Hemisphere. Some characters even begin to refer to the country as the American Empire. I kind of want to make a joke about how Americans give shitty names to things, but that one is kind of awesome. In the aftermath of the Great War, American veterans returned home to a country with very few economic opportunities. The socialists took advantage of this and were able to win a majority in the House of Representatives in 1918. Then in 1920, they managed to elect Upton Sinclair as president. Then they changed the American foreign policy to a more pacifist stance. It should be noted that the socialists were just a large minority in national politics until this point. The Democrats had won every election since 1882. The people of Canada started up an underground resistance movement before the war had even ended. The U.S. Army cracked down on them with extreme prejudice, going so far as to execute innocence to dissuade guerrillas. However, President Sinclair appointed a new governor after a few years and eased the occupation, which caused the entire resistance to die down. Meanwhile, in the CSA, politics in the economy had gone completely nuts. War reparations and the shock to the economy brought on by shutting down war production caused massive hyperinflation and unemployment. A bunch of reactionary political parties sprang up, fanning anti-American and anti-Black sentiment to gain support. The biggest of these was the Freedom Party, which gained popularity thanks to its chief speaker, a former Confederate soldier named Jake Featherston.  Featherston managed to become the leader of the party and steer it in an even more extreme direction. Pretty soon, members of the Freedom Party were elected to Congress and white-shirted assault squads called stalwarts, because Americans can't give things good names, attacked his political opponents. If you're at all familiar with the rise of the Nazi party in Germany, then this will sound like pretty much the same thing. And yeah, it is, but I want to go on a tangent about one important difference about the circumstances surrounding them. IRL, Adolf Hitler blamed Jews for Germany losing the war, being behind the rise of communism and the wrecked economy, all of which were completely false. German Jews actually fought on the front lines at a disproportionately high rate during the war, and the idea that a group of people who were supposedly all bankers would also all be communists is so stupid that I hopefully don't even need to explain it at all. But in the Southern Victory timeline, when Featherston blames the CSA's Black population for them losing the war, he kind of has a point. They did have a giant revolution, after all. Now, the CSA would probably have lost anyways due to their smaller population and industrial base, but the socialist uprisings undoubtedly sped things up. From the standpoint of an average citizen, the idea that they only lost because all the Black people were fighting for the other side would have made sense, and even been correct to a certain extent.  The members of the Freedom Party are shown in no uncertain terms to be the genocidal madmen that they are. I just think that this is an interesting distinction between this timeline and our own. With that out of the way, Jake Featherston ran for president in 1921 and lost, but only barely. Then in 1923, a Freedom Party stalwart assassinated the Confederate president at a political rally. Then the U.S. lifted war reparations. These things combined caused the Freedom Party to lose support and become more of a fringe political organization. Upton Sinclair, one reelection in the U.S. in 1924, and a civil war started in Mexico between monarchists and Republicans. Again, the Freedom Party sent a bunch of their stalwarts to fight on the part of the monarchists and the Confederate government sent them things like weapons and tanks. The U.S. sent some small support to the Republicans, but it wasn't nearly enough and so they lost the war. Okay, that's a lot, and it covers less than 10 years of history, so let's take a minute to look at how likely it all is. The idea of soldiers coming back for war and demanding better working conditions is very likely.  And with their combat experience and ability to organize, they could easily stage strikes and beat back any thugs that came to get rid of them. When you consider that the Socialist Party had increased workers' rights as a big part of their platform, it makes sense that their support would spike. Even more than that, the Socialists were against the war from the beginning, claiming that it was a war for imperialism and the greed of industrialists. The soldiers and citizens who had witnessed the horrors of war firsthand would probably have wanted to prevent something like that ever happening again, just like in our timeline. When you combine those two things, it becomes likely that the Socialists would win the next two elections. The occupation of Canada after the war is likely too. The Americans wouldn't want to give back any territory that they'd fought for and controlling Canada would secure their northern border. The brutal reprisals against civilians also seems likely since the US army is supposed to take after the German army in this timeline and that's exactly how they acted in occupied areas. They just thought it was the best way to dissuade armed resistance. It's pretty plausible that the Sinclair administration would want to take a gentler approach there. For one, a military occupation of a large area with a hostile population is unsustainable in the long run. And for another, the Socialists were anti-war and anti-imperialism to begin with. The only way I can see this not happening is if the military command was able to convince the new president that their way of doing things was better. As for the goings on in the CSA, they're also pretty consistent. The war and the reparation payments would almost certainly have wrecked their economy and it definitely would have bred resentment towards the United States. Well, more resentment.  The rise of reactionary right wing parties seems almost inevitable in this scenario. So this is likely. The only thing that's a little off is how fast the freedom party's rise is. I'm not saying it's impossible at all, rather that it's hard for me to believe that they would be able to get their message out to an entire country in only a couple of years with no internet or TV and with relatively few radios. Keep in mind that there were multiple reactionary parties saying very similar things to the freedom party that would have split the vote. It would have taken some wrangling before the supporters of those parties decided to throw their weight behind Featherston, so that change is plausible, borderline unlikely.  That's what fascists do. Mussolini did it, Hitler did it, that's just their MO. They can't win by the rules of democracy, so they just don't follow them. The assassination of the Confederate president seems plausible enough.  There are too many variables to say though, so that's why this one is just plausible. The response to this, with support for the freedom party falling, is very likely. People generally don't like it when their democratically elected leaders are murdered. Freedom party members going to Mexico to participate in the Civil War is pretty plausible. It certainly wouldn't be the first time in history that foreigners volunteered to fight in one side or another of a civil war. It also makes sense that the Confederate government would declare for the monarchists, since they had been allies with them for decades at that point. The only part that doesn't make sense is the Confederate government sending so many supplies to the monarchists. The Mexican Civil War is supposed to be roughly analogous to the real-life Spanish Civil War, because Nazi Germany favored one side in that war as well. The difference is that the Spanish Civil War started in 1936, long after Adolf Hitler had come to power, and long after the German economy had recovered. The Mexican war happened in the mid-1920s, when the Confederate economy was still in the toilet. They wouldn't have had the money to support either side of the war very much, so this development is unlikely. So far it seems like everything after the Great War is pretty solid and realistic. Hang on. When radios started to become more common, Jake Featherston took advantage of them to spread his message to more and more of the country. This kept the freedom party relevant, but the recovering economy meant that they no longer had as much appeal to the masses. The war was seen as being in the past, and people just wanted to move on. Then in 1929, the stock markets crashed and the Great Depression began, just like in our timeline. The freedom party took full advantage of this, and Featherston was elected president of the CSA in 1933. Meanwhile, in the United Kingdom, the British Union of Fascists rose to power in a similar way, although while they did manage to affect British politics, they were never more than a minority in parliament. And in France, the fascist Action Française, I'm probably pronouncing that wrong, came to power. Then they established a new monarchy. I know that sounds weird, but it lines up with their real-life ideology at the time. In the former central powers of Germany and Austria-Hungary, the economy took a hit, but things stayed pretty stable politically speaking. Same with Russia. In the Pacific, Japan pressured France and the Netherlands into giving up their colonies. It also began to exert more and more influence over China, even carving out a few pieces of it. The US also suffered from the financial collapse. Millions became jobless, and the Canadian resistance experienced a resurgence. A Japanese ship was discovered smuggling weapons to them, and so the US went to war in 1932. The economy slowly recovered in North America, and the American-Japanese war came to an inconclusive finish in 1935. Congressmen from Kentucky and Houston began to demand referendums in their home states to allow the people to determine if they would rejoin the CSA or not. After Featherston's election, he was able to consolidate power pretty effectively. The Freedom Party controlled Congress and passed whatever laws he wanted without much fuss. He was even able to abolish the Supreme Court through some complex political maneuvers. Then some forced elections combined with the stalwarts attacking anyone who opposed them solidified the Freedom Party's hold on Congress as well as state legislatures. Then the police and military were packed full of stalwarts and other Featherston loyalists. Soon, with permission from the President's and Attorney General, the states began to set up holding camps for political dissidents. Featherston also built up the Confederate military in flagrant violation of post-war treaties. Did I mention that these guys were based on the Nazis yet? While all of this was happening, the Black population was being squeezed beyond any tolerance. Their homes and jobs were taken through various laws, and they became even more impoverished and downtrodden than before. Small rebellions began to pop up all over the country, inspired by the previous Red Revolutions. To deal with these rebellions, Featherston started searching out places for, quote, population reduction. Yeah. The rest of this video is going to be pretty dark, kids. So the US government eventually relented under pressure and allowed the former Confederate states to vote on whether or not they wanted to rejoin the CSA. Kentucky and Houston both voted to go back to their old country, but Sequoia stayed part of the United States. So let's go over the plausibility of all that. The stock market crashing seems plausible enough. It's hard to say for certain how the differences in the war would affect the economic development of various nations, but as long as things like market speculation, high levels of debt among consumers, and overproduction of agriculture still happened on the same scale as real life, then the economy would certainly feel the effects. It probably wouldn't happen on the same date, but it's plausible that it would happen. The rise of fascism outside of the CSA is more of a mixed bag, though. The British Union of Fascists was a real political movement that had 50,000 members at its peak, and with the collapsed economy and the UK's loss in the Great War, it makes sense that they would grow even bigger in this timeline. They were never a majority in parliament, either, so it's not like they completely took over the way the Fascists did in other places, so I'd say that their rise is pretty plausible. France turning into a monarchy again is impossible. Axion Francaise's platform can be boiled down to two basic ideas. To bring back the monarchy and to take an aggressive stance against Germany. That last one is doable with a large determined minority, but the first one would require overwhelming support from the populace. There's no way that most of France would agree to give up their democratic form of government when they'd spent their whole lives living under it. At the very least, this would require a civil war to happen. So yeah, impossible. Germany staying stable is plausible. It's impossible to say how the economic crash would have affected them, but the people would have had confidence in their governments after it brought them through the Great War in such good shape. Austria-Hungary and Russia staying stable is unlikely. Even before the Great War, both countries were starting to crumble. Austria in particular was being torn apart by various ethnicities that wanted independence, as well as mismanagement from their government. And Russia had an even more incompetent government, as well as a severely undeveloped economy and more impoverished population.  That's exactly what caused the Bolshevik Revolution after all. Both countries should have been consumed by protests and riots, at the very least. Japan gaining more control over China makes sense. China was a crumbling country at this point in time, not even a country at all really, just a collection of pseudo-states run by warlords. And it was hardly industrialized at all. Without interference from the other Great Powers, Japan would definitely have been able to exert influence over its much bigger neighbor. So this is likely. Taking over the Dutch East Indies from the Netherlands seems less likely, though. The Netherlands seemed to be relatively close to the German Empire and the US, which were the strongest military powers in the world at this point in the timeline. Japan may have been in a good position to invade the colony, but they still would have had to deal with a response from the rest of the world. Any threats they made would have been toothless, so it's unlikely that the Netherlands would have handed over a valuable territory to them. Taking Indochina from France is impossible without a nasty fight, though. If France was going through a period of extreme nationalism and was actively trying to get Alsace Lorraine back from Germany, they would have gone to war before letting go of any of their colonies. Whether this would have been successful or not is up in the air. All I'm saying is that there would have been a fight. Japan taking weapons to Canadian gorillas is rated as plausible, borderline likely. The United States would have been Japan's only real rival in the Pacific at this time, and they would have wanted to dampen their influence any way that they could. Supplying their domestic enemies is a cheap and low-risk way to do that. Now, as for Featherston creating a one-party state, that's kind of hard to judge too. It required a lot of things to go his way, careful planning and charisma on his part, and fanatical loyalty from his followers. I'll say that him getting elected president is likely given the circumstances, but him managing to become the furor is on the line between unlikely and plausible. I know it's supposed to parallel events in Germany from real life, but Weimar Germany's government was set up a lot differently than the CSA. Specifically, it was much more centralized, which means that once the Nazis had control of the Reichstag, they had far more power over the country as a whole. The freedom party still needed to take over all the state governments as well, which would require a huge majority of the population to be on board.  It's not impossible by any means, just less likely than you may think. The Black Rebellions are rated as plausible. The Black population was already feeling resentful of their position before the freedom party came to power, that's why the Red Revolution happened in the first place. If they lost what little they had, then they'd start to get angrier, and with the memories of the last revolution still fresh, they might start to think that they could win if they just did it right this time. Of course, at the same time, the freedom party governments kept a much tighter lid on the Black population than the previous regime would have. Any Whisper of Resistance should have been met with a brutal crackdown. The Rebellions seem pretty small and disorganized, though, at least at first, so it seems like they're just made up of those who managed to slip through the cracks. So this one is just plausible. Kentucky and Houston rejoining the CSA is likely. It's made clear that before the Great War, the CSA was intensely nationalistic and the people absolutely hated the United States. I have little doubt that the people there would have jumped at the chance to go back to their homeland, as it were. Even if a couple of them were happier in the U.S., or if American settlers moved there, it probably wouldn't have outweighed those that just wanted to go back to the way things used to be. On that note, Sequoia staying in the U.S. is unlikely. There was a significant population of Native Americans there who hated the U.S. government even more than other Confederates. And, to be honest, it's kind of hard to blame them. It's mentioned that a lot of American settlers moved there, and that's what caused the vote to swing the other way. The problem is that there would need to be a metric fuck-ton of settlers to swing the vote. However, one thing that isn't mentioned in the books that could have affected this is the right to vote for Native Americans. It's entirely possible that the U.S. government only allowed white people to vote in Sequoia, and white Confederates would have been a much smaller block of voters to overcome. This possibility is never mentioned in the books, though, so I still have to rate this change as unlikely. So after the Great War, this timeline is more of a mixed bag. Rather than following a logical progression of events, the series seems to be more concerned with making parallels to real history. It's not a total loss, though. Some aspects of it still make sense. And then came the Second Great War. In Europe in 1941, Kaiser Wilhelm II died. France's new king demanded the return of Alsace Lorraine, the new Kaiser refused, and almost immediately France, the UK, the CSA, and Russia all declared war on Germany. Featherston decided that the time to strike had come, so he launched an immediate attack. Bombing raids struck Philadelphia and Southern Ohio. Right after that, the rest of the Entente powers also declared war on the U.S., and the Second Great War began. The U.S. immediately responded. Unfortunately, they expected the main thrust to come from the east like in the last war. Instead, the Confederates launched a combined arms assault focused on Ohio and captured the whole state in two months. With Ohio in Confederate hands, the United States was cut in half. It was possible to move men and materials through Canada, it's just that that was the long way around, and the Canadian resistance harassed any shipping that they could, so it was slow going. Oh yeah, and the Mormons rebelled in Utah again. How many times do we have to teach you this lesson, old man? At sea, neither the Americans or Confederates could gain a decisive advantage, and they mostly just sank cargo ships. In the Pacific, Japan attacked the American naval installation at Midway Island and then captured the whole island. They didn't make much progress after that, though. Later, the Americans began a counteroffensive against the CSA through Virginia, which made some progress but became bogged down. When winter started, both sides settled down to wait for spring. While all of this was happening, the genocide of Black Confederates began in earnest. Any Black person with a passbook that seemed out of sorts immediately got shipped out to a camp in Louisiana or Texas. In the cities, they were used as slave labor in munitions plants, and whenever the Reds committed any sort of attack, they suffered brutal reprisals. In the camps, the guards first tried to slaughter the prisoners using submachine guns. Men, women, and children were all lined up against walls and gunned down. They quickly found this to be ineffective, though, and the brutality of it caused more than one camp guard to swallow a bullet. So then they moved on to poison gas. They built a bunch of sealed trucks and then claimed that they were being used to transfer prisoners between camps. Instead, the occupants were gassed inside and then dumped in mass graves. I told you this video would get dark, kids. And to make things even more upsetting, the news of this all reached the American public, and most of them didn't really care. They were somewhat sympathetic, but they weren't exactly excited to help out foreign Black people. And the on-taunt powers just pointed to the way Americans acted in Utah and Canada in response. In 1942, the Confederates attacked the American Industrial Center of Pittsburgh. They managed to do some serious damage to the city, and the chief of staff recommended they retreat, their objective completed. Featherston refused to allow it, though.  After months of this, an American army counterattacked, smashing through the screening force and surrounding the city. The Confederate army was not allowed to attempt a breakout and so eventually surrendered. Get it? It's Stalingrad! Did you figure out that this was a fictional version of Stalingrad? Because it was. It was a fictional version of Stalingrad. After this, the tide began to turn in the Americans' favor. The Confederates were pushed back into Ohio, the Mormon rebellion was crushed by mid-1943, they recaptured Midway, they started running weapons to resistance fighters in Cuba, and they besieged the remnants of the Canadian resistance in Winnipeg. The Confederates were also running short of manpower by that point and were forced to bring Mexican soldiers up to police their territory. They weren't very good at fighting off the Black partisans, though, so they began to launch bigger attacks. Pretty soon, American forces had advanced across the board and cut the CSA in half by capturing Georgia. In desperation, Featherston ordered an attack on Philadelphia using their newly developed weapon, an atomic bomb. The bomb detonated on the outskirts of the city, though, and so most of the government survived. In retaliation, the U.S. dropped atomic bombs on Newport News, Virginia, and Charleston, South Carolina. I should note that people call them super bombs in this timeline. What an imaginative name, American scientists. The U.S. continued to press the CSA back in Texas and even liberated a couple of extermination camps. The governments of Texas declared independence from the CSA and allied itself with the Americans. The leaders of the extermination program were arrested, then tried and executed. The last major Confederate army surrendered in Alabama, but Featherston still refused to give up the fight. He hopped on a plane with some of his inner circle and flew off to what remained of unoccupied territory, hoping to continue the war with a guerrilla force. Unfortunately for him, his plane was shot down and upon crashing, he came face to face with a band of partisans. One of them recognized him and shot him dead immediately. The vice president took over just long enough to unconditionally surrender. With that, the Confederate states of America ceased to exist. The American military still had to deal with pockets of Confederate resistance fighters and terrorists. In retaliation for attacks, they would often execute dozens of Confederate civilians. Because that worked great with the Mormons and Canadians, didn't it? Speaking of Canadians, their resistance finally petered out when they realized that the full might of the US military could now be turned on them, and when the Americans threatened to hit them with an atomic bomb, well, the writing was on the wall. The black Confederate population was decimated and was now little more than a few shell-shocked camp survivors and bands of partisans. The US government expressed an interest in reabsorbing most of the CSA back into the Union, with the possible exceptions of Cuba, Chihuahua, Sonora, and Texas. The series ends with the ultimate fate of the former Confederacy unknown. But what was happening in Europe at the same time? The war started there, after all. Well, the Entente did really well at the beginning. The Russians invaded Ukraine and were greeted as liberators by most of the population, meaning they captured most of the country right away. However, the Russian army didn't have much tactical sense beyond just throwing their massive manpower at the German defenses, which means that they took heavy losses for very little gain. They were unable to take Poland. In the West, the British captured Ireland without too much trouble. The French retook Alsace-Lorraine, while a combined British-French assault took Belgium and the Netherlands. The Belgians were grateful to the Entente. The Dutch, not so much, they were more in favor of the Central Powers, but they were still brushed aside rather quickly. Soon, the Entente were on the banks of the Rhine River. By late 1942, the tide had turned in favor of the Central Powers. The Entente were still stuck in Western Germany and dealing with a giant Irish uprising, while at sea, the German and British navies clashed in a battle where they both claimed victory. In Austria-Hungary, there were approximately 35,000 different uprisings at once. Serbs, Bosnians, and other ethnic groups all started bombing and attacking Austrian military installations, meaning that the Empire had trouble even keeping itself together. Russia was in a sort of similar position with some of its own minorities like Jews and Chechens.  If you're ever the absolute monarch of a continent-sized empire and you allow your citizens to pogrom some of your other citizens, you'll eventually have to deal with an uprising or two. I wish I could give more information about that, but these books are pretty sparse on the details outside of North America. Not to mention that some of the characters get their information from state propaganda, which makes it hard to determine how accurate it is. Sorry if this segment feels a little light. Around this time, Japan abandoned its war on the United States and prepared to attack the British colonies of Malaya and Singapore. They stayed pretty quiet for the rest of the war. Multiple countries all had atomic weapons programs going on at this time. Germany was in the lead since Albert Einstein and other prominent Jewish scientists still lived there. In late 1943, the German army was able to push the Entente over the Dutch border, then they kept going. Outside of Kiev, they dealt a massive blow to the Russians and retook Ukraine. With their southern flank secure, they began to march on Petrograd and the Russian army was helpless to stop them. Sometime later, Germany wiped out Petrograd with a super bomb. This was actually before the Confederate bomb hit Philadelphia, so the shock to the world was enormous. Then they dropped another bomb on Paris. The British made their own super bomb and dropped it on Hamburg, and the Germans responded by wiping out Norwich, Brighton, and London. Due to all these attacks, France, the UK, and Russia all experienced a change in government and all requested an armistice. This was around the same time that Texas seceded from the CSA, meaning that the war in Europe came to a close only a few weeks before the war in North America. The series ends with the US and Germany declaring intentions for a long-term partnership to police the world and prevent their enemies from getting a hold of super bomb technology, but a lot of people think that this partnership won't last. Oh boy, that's a lot of changes and developments to rate. Let's get on it. So, France demanding all-sauce Lorraine right after the Kaiser dies. This is likely. Even before the new regime took power, they were chomping at the bit to take back what they considered their rightful territory and punish Germany for perceived wrongs. And with a new German Kaiser coming to power, they would have wanted to make demands while he was still getting his feet under him. And his refusal to cave to their demands would have given them an excuse for declaring more, too. The UK deciding to pile on is likely, too. Russia, I'll say, is on the line between plausible and likely.  Maybe the Tsar thought war was a good idea, but if he was smart he would have stayed out of it. Back to North America. The CSA declaring war on the US is likely, too, since all of their allies were distracted. It is kind of odd that they waited so long, though. I know that the date of the invasion falls on the same day as Operation Barbarossa in our timeline, but that feels more like an intentional reference than a logical progression of the setting. If France was chomping at the bit to attack Germany, then the CSA was absolutely foaming at the mouth to attack their most hated enemy. Jake Featherston in particular seems like an absolute madman who would want to strike as soon as possible rather than wait for the most opportune moment. It's also impossible that George Patton would have commanded the Confederate army that invades Ohio. Even if we accept that events from before he was born still resulted in him being born in the exact same way he would have been born in California. And if we assume that his family stayed in Virginia after the War of Secession, then the circumstances of his birth would have resulted in a different person. But whatever, let's focus on the bigger stuff. The main thrust of the attack going into Ohio is pretty sound strategy. Its success is more dubious, though. The commanders of that front were pretty competent, and they only failed in their defense because they didn't have enough manpower or resources to stop Patton. And the War Department only wouldn't give them what they needed because they thought the main attack would come from the east. I think this is a reference to the Maginot Line from World War II, but it's not a very good one. The Maginot Line wasn't supposed to stop the Germans, it was supposed to force them to invade through Belgium so that the French would be in an advantageous defensive position. It only didn't work because the Germans punched through a weak point in their lines.  Even after seeing the attack on Ohio, they don't figure out what's happening, so the Confederates actually taking Ohio is an unlikely development. As for Mormon Rebellion Number 4, sure, it's plausible. After all the reprisals they've faced, they'd be glad to try and gain independence again. The only part that seems odd is that Utah was already under close military watch, so any attempts to organize resistance should have been caught before anything could happen. But still, plausible. The Canadian resistance is in very much the same boat, only I'd say it's slightly more likely since it's a bigger area and you can't effectively watch the whole thing. Japan taking Midway Island seems a little bit less likely, since Midway was a very fortified base both IRL and in this timeline. What's weirder is that they would attack the US and then just sort of stop their war, then switch sides and attack British colonies. I guess they just wanted to stay in their own part of the world and decided that the US wasn't a threat? I don't know. But it's unlikely that they'd act this way, they'd either commit to the war on one side or stay out of it. The extermination of Black Confederates is very unlikely. The Freedom Party came to power specifically to take care of them, that was always Featherston's goal. This is supposed to parallel the Holocaust after all, the government wanting to kill them makes sense. However, the Holocaust was committed primarily on Jews which made up only 0.75% of the German population. And even when you include all the other groups that were targeted like Roma and the Disabled, it would have only been a tiny part of the total population. In this timeline, Black people made up around a third of the CSA's population. Not only that, they depended on them for manual labor.  And setting that aside, if a segment of your population is that large, you'll never be able to actually move them or build big enough camps for all of them, especially with most of your manpower going towards a giant war. Not to sound callous of course, there are a hell of a lot more problems with genocide than just the logistics of it. Getting back to the war in Ohio, if the CSA was able to actually take the state, then attacking Pittsburgh next is likely. It was a seat of industry and destroying it would do major damage. Actually capturing it is plausible since they had a giant army and the Americans were focusing on other fronts. But the commanders were already experienced with their methods of fighting, so it's not likely. The brutal house-to-house fighting seems to check out too, that's how most battles in cities go in the modern era. And as someone who spent time in the South, I can tell you that those folks can't handle the cold. They'd be plenty weakened by the winter fighting and since they weren't allowed to retreat, the Americans would most likely be able to either surround them or destroy them completely. The CSA should have lost most of its fighting capability in that campaign, Like I already said, they were way smaller than the US and had a way smaller industrial base and were actively genociding a third of their population. They couldn't bring the same level of military might as their opponent. They gambled their whole war effort on the Pittsburgh campaign and they blew it. Even if the Freedom Party refused to surrender, they would be reduced down to bands of guerrillas almost right away. There wouldn't be any way to maintain or build up the big armies that they still had until the very end of the war. So the war continuing for another year and a half after the Battle of Pittsburgh is extremely unlikely. The Americans crushing the Canadian resistance is likely since they were pretty small. Same with the Mormons. As for the atomic bombs, that's hard to say. In fact, given how much scientific advancement would have changed if different people were born, it's impossible to say. So I'll just rate the development as plausible and leave it at that. Featherston using one is very likely and the Americans trying it in response is also likely. The Black Partisans waging a guerrilla campaign against the CSA is pretty likely too, but I feel like it would be bigger. During the First Great War, the Reds would only really appeal to part of the Black population since they were, you know, communists.  They should have not only been forming bands of guerrillas, they should have been completely taking over chunks of territory. But whatever, still likely. The CSA only surrendering long after they had lost the ability to fight is unlikely. Remember how it took years for Featherston to consolidate power because there was a lot of resistance to him? Not all of those people were killed. There would have been plenty that kept their heads down. And if they deserted from the military or gave aid to the Americans, the war would have been over much faster. Texas's seceding is rated unlikely too. Even before the war, Texas was one of the states that most supported the Freedom Party. Featherston won the vote there in every election. It would make more sense for a state like Cuba or Sonorita secede since they were farther from the seat of power and were less supportive of Featherston to begin with. And finally, we get to the American reaction to the extermination camps. Actually seeing the photos and hearing the first-hand accounts would be horrifying to just about everyone. And if the US government wanted their propaganda to work at all, they would have had to try and execute the ring leaders. So all of this is plausible, borderline likely. Now onto Europe. As I said before, there's not a whole lot of info on the war there, so some of it is hard to judge.  The idea that they used human-wave tactics isn't a complete myth. They did do things like charge into machine gun nests during World War I, but so did everyone else. They learned their lesson pretty quickly and found other ways to attack, though. That's not to say they didn't still launch attacks that could be considered suicidal, just that they didn't launch them all the time. If Russia had gone through the First Great War and a lengthy Civil War, then their officer corps would definitely have learned a thing or two about how to conduct a modern war. If they hadn't, then they wouldn't have won the Civil War at all. So their incompetence is impossible. Not only that, but there's no way they'd make any progress whatsoever with those sorts of tactics.  So Russia making any progress at all is impossible. Most Ukrainians switching to side with the invading Russians seems unlikely. Even in our timeline, there was a pretty big nationalist movement there. They weren't big fans of the Tsar at all. Of course, there's not much detail about how their status as a German puppet state worked out for them. It could have been even worse. That's the only reason this is rated unlikely and not impossible. The Germans marching on Petrograd as a counterattack is rated likely. It was the Russian seat of governments, it was relatively close to Germany, and it was a railroad hub. It was a perfect target, and capturing it would have been a serious blow. But then the Germans dropped a super bomb on the city instead, even though they would have been able to take it without much trouble. I guess this is plausible? High command may have wanted to scare the Russians into surrendering quickly, or send a message to the rest of the Entente. It's also almost guaranteed that Russia would surrender after that. As for the war in the West, that's a different story. Okay, not really, but that's fun to say. France retaking Alsace-Lorraine without any trouble is unlikely. There were a ton of fortifications there on both sides that would have slowed any attacks significantly. By the 1940s, static defenses were much less useful than they had been in earlier eras, but that doesn't mean they were totally useless. The French-British offensive taking the Low Countries right away is likely though. Both of those countries are pretty flat for the most part, making them ideal for tanks to drive through. And since Belgium was generally not a fan of being occupied by Germany, it's likely that they would have assisted the Entente invasion, further deteriorating whatever defenses were set up. The German forces managing to halt the Entente at the river Rhine seems plausible enough, since it's a natural obstacle. The Germans being able to push back against the Entente is difficult to judge. I feel like they'd be outnumbered by a pretty big margin though, so I'm gonna rate this unlikely. Them dropping a super bomb on Paris is excessive, but plausible, since, well, they'd already wiped out one city, what's one more? The brief back and forth super bomb battle between Germany and the UK is unlikely. After they had one or two cities incinerated, the British would have surrendered. They weren't run by madmen like the CSA, pragmatism would almost certainly have one out sooner. The Entente surrendering after all those nukes is extremely likely, though. Ireland's being taken over right away is plausible. The invasion started in the loyalist stronghold of the north, and with Ireland's allies busy elsewhere, it's not impossible to think that a large military power could take over the island. It's just, they were able to fight them off using irregular militias during the First Great War. They should have been able to do that here, or at least defend themselves better. Austria-Hungary being torn apart by ethnic tensions is very likely. They were barely holding together before the First Great War, and if you look at how the empire fell apart in our timeline, it wasn't a whole lot different. All the bombings and assassinations should have been the opening shots of a civil war, and the whole empire staying together is very unlikely in this scenario. And that's where the story ends. Look, I get that the point of the last seven books in this series are meant to parallel the real-life rise of fascism, World War II, and the Holocaust. The issue is that the world was so different from our own at the end of the Great War trilogy that many of the events that come afterwards feel forced. A fictional version of the Battle of Stalingrad in Pittsburgh makes for thrilling reading, and actually getting into the mind of someone like Jake Featherston is absolutely fascinating, so don't mistake my criticisms for me saying that these books are bad. They're still a hell of a lot of fun, and I definitely recommend them as an example of what the alternate history genre is capable of. It's just that everything after breakthroughs is more like a dramaticized history book than a fictional story. That's about all there is to say about that, though. I just want to take a quick second to thank everyone who's discovered my channel in the past month and a half. This growth rate has been insane. I'm still kind of reeling from it, to be honest. If you haven't subscribed yet, please do so now. And also, you've probably noticed that I have upgraded my sound equipment, but I'm still tweaking it, so hopefully the next one will sound even better than this. See you next time.