Archive for July, 2012
Question of the Week: How can computers calculate exponential math without overflow errors?
This weeks question of the week comes from Kit-Ho who poses:
Studying some RSA encrypt/decrypt methods, I found this article: An Example of the RSA Algorithm It requires this to decrpyt this message The total result of is so big, for a 64-bit/32-bit machine, I don’t believe it can hold such a big value in one register. How does the computer do it without an overflow?
For those of you that may not know what this “Overflow” that Kit mentioned, he’s talking about a term Stack Overflow. Here’s the official “Wiki” definition:
In software, a stack overflow occurs when too much memory is used on the call stack. The call stack contains a limited amount of memory, often determined at the start of the program. The size of the call stack depends on many factors, including the programming language, machine architecture, multi-threading, and amount of available memory. When a program attempts to use more space than is available on the call stack (that is, when it attempts to access memory beyond the call stack’s bounds, which is essentially a buffer overflow), the stack is said to overflow, typically resulting in a program crash. This class of software bug is usually caused by one of two types of programming errors.
As pointed out by Dennis (thanks!) I completely got this wrong. Stack overflow isn’t the issue, but rather integer overflow:
In computer programming, an integer overflow occurs when an arithmetic operation attempts to create a numeric value that is too large to be represented within the available storage space. For instance, adding 1 to the largest value that can be represented constitutes an integer overflow. The most common result in these cases is for the least significant representable bits of the result to be stored (the result is said to wrap). On some processors like GPUs and DSPs, the resultsaturates; that is, once the maximum value is reached, attempts to make it larger simply return the maximum result.
For example, a mechanical odometer, has a rollover (or reset) after a certain amount of miles:
This is the same as computer integer overflow, where the size of the numbers needed are greater than the object type can hold. Kit-Ho’s example RSA link exceedes the C#’s max value of 18,446,744,073,709,551,615 of the long type.
Dietrich Epp came up with a great answer as to how computers can calculate these large numerical calculations:
How to check if you’ve been infected by DNS Changer virus.
Kira asked an interesting question:
How to know if your computer is hit by a dnschanger virus?
In case you didn’t hear, back in November, the FBI took down the company “Rove Digital” which was actually a set of cyber criminals, that created and distributed a DNS changing malware. Here’s a little more detail straight from the FBI:
Criminals have learned that if they can control a user’s DNS servers, they can control what sites the user connects to on the Internet. By controlling DNS, a criminal can get an unsuspecting user to connect to a fraudulent website or to interfere with that user’s online web browsing. One way criminals do this is by infecting computers with a class of malicious software (malware) called DNSChanger. In this scenario, the criminal uses the malware to change the user’s DNS server settings to replace the ISP’s good DNS servers with bad DNS servers operated by the criminal.
HackToHell also gave a great explanation of what a DNS Changer virus does:
DNS (Domain Name System) is an Internet service that converts user-friendly domain names into the numerical Internet protocol (IP) addresses that computers use to talk to each other. For example, google.com is actually an IP address (173.194.38.164). DNS makes it easier for us to remember the site names. DNS servers convert the domain names into IP addresses. Now the malware, changes the domain naming servers in your computer and uses a different malicious DNS server. This malicious DNS server, swaps IP’s and takes the user to a fake site.
Unfortuantely his answer to checking if your computer is infected, is now obsolete. So here’s and alternative: