How to use Ping to test your network latency

If bandwidth is the quantity of your connection, then latency must be a measure of the quality of it. Latency is the time it takes for the smallest amount of information to go back and forth between you and a host. If you see packet loss on your trip to your ISP then your line is the issue.

People often talk about the internet connection speed - the bandwidth as measured in megabits - but for certain realtime applications like telephony, gaming, and remote shells - the data quality is more important. Dropped packets in telephony and audio streams leads to static and lost sound.

After installing Fibre Optic at my new place I compare a ping to Google Public DNS (, and we see packet loss disappear, and the average time drop from a whopping and hard to believe 57 seconds down to just 31 milliseconds, with a minimum of 28 ms.

An example of a good ping time

13inch:~ tom$ ping
PING ( 56 data bytes
64 bytes from icmp_seq=0 ttl=59 time=32.911 ms
64 bytes from icmp_seq=1 ttl=59 time=31.874 ms
64 bytes from icmp_seq=2 ttl=59 time=30.760 ms
64 bytes from icmp_seq=3 ttl=59 time=29.730 ms
64 bytes from icmp_seq=4 ttl=59 time=31.490 ms
64 bytes from icmp_seq=5 ttl=59 time=29.063 ms
64 bytes from icmp_seq=6 ttl=59 time=32.466 ms
64 bytes from icmp_seq=7 ttl=59 time=31.149 ms
64 bytes from icmp_seq=8 ttl=59 time=32.787 ms
64 bytes from icmp_seq=9 ttl=59 time=40.585 ms
64 bytes from icmp_seq=10 ttl=59 time=32.434 ms
64 bytes from icmp_seq=11 ttl=59 time=29.902 ms
64 bytes from icmp_seq=12 ttl=59 time=29.264 ms
64 bytes from icmp_seq=13 ttl=59 time=31.894 ms
64 bytes from icmp_seq=14 ttl=59 time=32.299 ms
64 bytes from icmp_seq=15 ttl=59 time=30.051 ms
64 bytes from icmp_seq=16 ttl=59 time=32.315 ms
64 bytes from icmp_seq=17 ttl=59 time=28.942 ms
64 bytes from icmp_seq=18 ttl=59 time=31.891 ms
64 bytes from icmp_seq=19 ttl=59 time=30.485 ms
64 bytes from icmp_seq=20 ttl=59 time=29.383 ms
--- ping statistics ---
21 packets transmitted, 21 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 28.942/31.508/40.585/2.402 ms
13inch:~ tom$

Official worst internet connection ever.

Since I was on dialup at my mums place in Coromandel.

Laptop connected to my Wifi router which is getting its net itself via Wifi tethering from my iPhone 5S which is barely able to make a call or send txt let alone the internet!

491 packets transmitted, 137 packets received, 72.1% packet loss
round-trip min/avg/max/stddev = 4911.674/57951.524/100173.596/21656.897 ms
13inch:pay2c.Xyz tom$

64 bytes from icmp_seq=177 ttl=54 time=52771.304 ms
64 bytes from icmp_seq=178 ttl=54 time=51795.556 ms
64 bytes from icmp_seq=179 ttl=54 time=50792.636 ms
64 bytes from icmp_seq=180 ttl=54 time=49790.734 ms
64 bytes from icmp_seq=181 ttl=54 time=48787.671 ms
64 bytes from icmp_seq=182 ttl=54 time=47787.012 ms
64 bytes from icmp_seq=183 ttl=54 time=46782.079 ms
64 bytes from icmp_seq=184 ttl=54 time=45778.752 ms
64 bytes from icmp_seq=185 ttl=54 time=44782.822 ms
64 bytes from icmp_seq=186 ttl=54 time=43778.280 ms
64 bytes from icmp_seq=187 ttl=54 time=42774.619 ms
64 bytes from icmp_seq=188 ttl=54 time=41773.082 ms
64 bytes from icmp_seq=189 ttl=54 time=40785.548 ms
64 bytes from icmp_seq=190 ttl=54 time=39820.873 ms
64 bytes from icmp_seq=191 ttl=54 time=38818.465 ms
64 bytes from icmp_seq=195 ttl=54 time=35601.609 ms
64 bytes from icmp_seq=196 ttl=54 time=35405.563 ms
64 bytes from icmp_seq=197 ttl=54 time=34595.935 ms
64 bytes from icmp_seq=198 ttl=54 time=34440.231 ms
64 bytes from icmp_seq=199 ttl=54 time=34118.466 ms
64 bytes from icmp_seq=200 ttl=54 time=37025.789 ms
64 bytes from icmp_seq=205 ttl=54 time=33701.815 ms
64 bytes from icmp_seq=232 ttl=54 time=14587.327 ms
Request timeout for icmp_seq 252
Request timeout for icmp_seq 253
Request timeout for icmp_seq 254
64 bytes from icmp_seq=247 ttl=54 time=8570.665 ms
64 bytes from icmp_seq=248 ttl=54 time=7776.425 ms
64 bytes from icmp_seq=249 ttl=54 time=6920.444 ms
64 bytes from icmp_seq=250 ttl=54 time=6515.482 ms
64 bytes from icmp_seq=251 ttl=54 time=5631.024 ms
64 bytes from icmp_seq=252 ttl=54 time=5052.276 ms
64 bytes from icmp_seq=253 ttl=54 time=5014.476 ms
64 bytes from icmp_seq=254 ttl=54 time=5749.126 ms
64 bytes from icmp_seq=255 ttl=54 time=4911.674 ms
Request timeout for icmp_seq 264
Request timeout for icmp_seq 265
Request timeout for icmp_seq 266
Request timeout for icmp_seq 267
Request timeout for icmp_seq 268
Request timeout for icmp_seq 269
64 bytes from icmp_seq=256 ttl=54 time=14185.624 ms
Request timeout for icmp_seq 271
Request timeout for icmp_seq 272
Request timeout for icmp_seq 273
Request timeout for icmp_seq 274
Request timeout for icmp_seq 275
Request timeout for icmp_seq 276
Request timeout for icmp_seq 277
Request timeout for icmp_seq 278
Request timeout for icmp_seq 279
Request timeout for icmp_seq 280
Request timeout for icmp_seq 281
Request timeout for icmp_seq 282
Request timeout for icmp_seq 283
Request timeout for icmp_seq 284
Request timeout for icmp_seq 285
Request timeout for icmp_seq 286
Request timeout for icmp_seq 287
64 bytes from icmp_seq=257 ttl=54 time=31445.453 ms
Request timeout for icmp_seq 289
64 bytes from icmp_seq=258 ttl=54 time=32457.728 ms
Request timeout for icmp_seq 291
Request timeout for icmp_seq 292
Request timeout for icmp_seq 293
Request timeout for icmp_seq 294
64 bytes from icmp_seq=259 ttl=54 time=36411.157 ms
Request timeout for icmp_seq 296
Request timeout for icmp_seq 297
Request timeout for icmp_seq 298
64 bytes from icmp_seq=260 ttl=54 time=39733.101 ms
Request timeout for icmp_seq 300
Request timeout for icmp_seq 301
Request timeout for icmp_seq 302
64 bytes from icmp_seq=261 ttl=54 time=42477.703 ms
Request timeout for icmp_seq 304
64 bytes from icmp_seq=262 ttl=54 time=43441.612 ms
64 bytes from icmp_seq=263 ttl=54 time=43432.266 ms
Request timeout for icmp_seq 307
64 bytes from icmp_seq=264 ttl=54 time=45050.706 ms
Request timeout for icmp_seq 309
64 bytes from icmp_seq=265 ttl=54 time=45137.945 ms
64 bytes from icmp_seq=266 ttl=54 time=45173.820 ms
64 bytes from icmp_seq=267 ttl=54 time=44506.264 ms
Request timeout for icmp_seq 313
Request timeout for icmp_seq 314
Request timeout for icmp_seq 315
Request timeout for icmp_seq 316
Request timeout for icmp_seq 317
Request timeout for icmp_seq 318
Request timeout for icmp_seq 319
Request timeout for icmp_seq 320
Request timeout for icmp_seq 321
Request timeout for icmp_seq 322
Request timeout for icmp_seq 323
Request timeout for icmp_seq 324
64 bytes from icmp_seq=268 ttl=54 time=57362.380 ms
Request timeout for icmp_seq 326
Request timeout for icmp_seq 327
Request timeout for icmp_seq 328
Request timeout for icmp_seq 329
64 bytes from icmp_seq=269 ttl=54 time=61603.631 ms
64 bytes from icmp_seq=270 ttl=54 time=61590.294 ms
Request timeout for icmp_seq 332
64 bytes from icmp_seq=271 ttl=54 time=62326.436 ms
Request timeout for icmp_seq 334
Request timeout for icmp_seq 335
64 bytes from icmp_seq=272 ttl=54 time=65071.367 ms
Request timeout for icmp_seq 337
Request timeout for icmp_seq 338
64 bytes from icmp_seq=273 ttl=54 time=66941.069 ms
Request timeout for icmp_seq 340
64 bytes from icmp_seq=274 ttl=54 time=67932.502 ms
Request timeout for icmp_seq 342
Request timeout for icmp_seq 343
64 bytes from icmp_seq=275 ttl=54 time=69433.195 ms
64 bytes from icmp_seq=276 ttl=54 time=69818.324 ms
64 bytes from icmp_seq=278 ttl=54 time=68618.593 ms
64 bytes from icmp_seq=279 ttl=54 time=68027.879 ms
64 bytes from icmp_seq=280 ttl=54 time=67154.395 ms
Request timeout for icmp_seq 349
Request timeout for icmp_seq 350
Request timeout for icmp_seq 351
Request timeout for icmp_seq 352
Request timeout for icmp_seq 353
64 bytes from icmp_seq=281 ttl=54 time=74049.322 ms
Request timeout for icmp_seq 355
Request timeout for icmp_seq 356
64 bytes from icmp_seq=282 ttl=54 time=76036.362 ms
Request timeout for icmp_seq 358
Request timeout for icmp_seq 359
Request timeout for icmp_seq 360
Request timeout for icmp_seq 361
Request timeout for icmp_seq 362
64 bytes from icmp_seq=283 ttl=54 time=81122.351 ms
64 bytes from icmp_seq=284 ttl=54 time=80909.673 ms
Request timeout for icmp_seq 365
64 bytes from icmp_seq=285 ttl=54 time=82186.723 ms
Request timeout for icmp_seq 367
64 bytes from icmp_seq=286 ttl=54 time=82619.370 ms
Request timeout for icmp_seq 369
Request timeout for icmp_seq 370
Request timeout for icmp_seq 371
Request timeout for icmp_seq 372
Request timeout for icmp_seq 373
Request timeout for icmp_seq 374
Request timeout for icmp_seq 375
Request timeout for icmp_seq 376
Request timeout for icmp_seq 377
Request timeout for icmp_seq 378
64 bytes from icmp_seq=287 ttl=54 time=93182.677 ms
Request timeout for icmp_seq 380
Request timeout for icmp_seq 381
64 bytes from icmp_seq=317 ttl=54 time=65322.352 ms
Request timeout for icmp_seq 383
Request timeout for icmp_seq 384
Request timeout for icmp_seq 385
Request timeout for icmp_seq 386
64 bytes from icmp_seq=318 ttl=54 time=69428.438 ms
64 bytes from icmp_seq=319 ttl=54 time=69204.778 ms
64 bytes from icmp_seq=320 ttl=54 time=68604.710 ms
64 bytes from icmp_seq=321 ttl=54 time=69250.154 ms
64 bytes from icmp_seq=322 ttl=54 time=69024.922 ms
64 bytes from icmp_seq=323 ttl=54 time=68852.795 ms
64 bytes from icmp_seq=324 ttl=54 time=68381.716 ms
64 bytes from icmp_seq=325 ttl=54 time=68460.245 ms
64 bytes from icmp_seq=326 ttl=54 time=67890.598 ms
Request timeout for icmp_seq 396
Request timeout for icmp_seq 397
Request timeout for icmp_seq 398
64 bytes from icmp_seq=327 ttl=54 time=72224.042 ms
Request timeout for icmp_seq 400
Request timeout for icmp_seq 401
Request timeout for icmp_seq 402
Request timeout for icmp_seq 403
64 bytes from icmp_seq=348 ttl=54 time=56707.034 ms
Request timeout for icmp_seq 405
Request timeout for icmp_seq 406
64 bytes from icmp_seq=351 ttl=54 time=56621.675 ms
64 bytes from icmp_seq=352 ttl=54 time=55620.525 ms
64 bytes from icmp_seq=353 ttl=54 time=54887.953 ms
64 bytes from icmp_seq=354 ttl=54 time=54205.236 ms
64 bytes from icmp_seq=355 ttl=54 time=53624.076 ms
Request timeout for icmp_seq 412
Request timeout for icmp_seq 413
Request timeout for icmp_seq 414
Request timeout for icmp_seq 415
Request timeout for icmp_seq 416
Request timeout for icmp_seq 417
Request timeout for icmp_seq 418
Request timeout for icmp_seq 419
Request timeout for icmp_seq 420
Request timeout for icmp_seq 421
64 bytes from icmp_seq=357 ttl=54 time=65797.155 ms
Request timeout for icmp_seq 423
Request timeout for icmp_seq 424
Request timeout for icmp_seq 425
Request timeout for icmp_seq 426
Request timeout for icmp_seq 427
Request timeout for icmp_seq 428
Request timeout for icmp_seq 429
Request timeout for icmp_seq 430
Request timeout for icmp_seq 431
Request timeout for icmp_seq 432
Request timeout for icmp_seq 433
Request timeout for icmp_seq 434
Request timeout for icmp_seq 435
Request timeout for icmp_seq 436
Request timeout for icmp_seq 437
Request timeout for icmp_seq 438
Request timeout for icmp_seq 439
Request timeout for icmp_seq 440
Request timeout for icmp_seq 441
Request timeout for icmp_seq 442
Request timeout for icmp_seq 443
Request timeout for icmp_seq 444
Request timeout for icmp_seq 445
Request timeout for icmp_seq 446
Request timeout for icmp_seq 447
64 bytes from icmp_seq=389 ttl=54 time=59933.766 ms
64 bytes from icmp_seq=390 ttl=54 time=59740.642 ms
64 bytes from icmp_seq=391 ttl=54 time=59882.162 ms
Request timeout for icmp_seq 451
Request timeout for icmp_seq 452
Request timeout for icmp_seq 453
Request timeout for icmp_seq 454
Request timeout for icmp_seq 455
Request timeout for icmp_seq 456
Request timeout for icmp_seq 457
64 bytes from icmp_seq=392 ttl=54 time=66705.322 ms
64 bytes from icmp_seq=393 ttl=54 time=66187.189 ms
64 bytes from icmp_seq=394 ttl=54 time=65313.387 ms
64 bytes from icmp_seq=395 ttl=54 time=65274.663 ms
64 bytes from icmp_seq=396 ttl=54 time=65201.259 ms
64 bytes from icmp_seq=397 ttl=54 time=65043.247 ms
64 bytes from icmp_seq=398 ttl=54 time=64591.833 ms
Request timeout for icmp_seq 465
Request timeout for icmp_seq 466
Request timeout for icmp_seq 467
Request timeout for icmp_seq 468
Request timeout for icmp_seq 469
Request timeout for icmp_seq 470
64 bytes from icmp_seq=399 ttl=54 time=72608.465 ms
64 bytes from icmp_seq=400 ttl=54 time=71606.695 ms
64 bytes from icmp_seq=401 ttl=54 time=70603.331 ms
64 bytes from icmp_seq=402 ttl=54 time=69610.261 ms
64 bytes from icmp_seq=403 ttl=54 time=68606.763 ms
64 bytes from icmp_seq=404 ttl=54 time=67607.793 ms
64 bytes from icmp_seq=405 ttl=54 time=66610.263 ms
64 bytes from icmp_seq=406 ttl=54 time=66066.892 ms
64 bytes from icmp_seq=409 ttl=54 time=65526.582 ms
64 bytes from icmp_seq=410 ttl=54 time=64708.668 ms
64 bytes from icmp_seq=411 ttl=54 time=63938.379 ms
64 bytes from icmp_seq=412 ttl=54 time=62978.977 ms
64 bytes from icmp_seq=413 ttl=54 time=62329.996 ms
64 bytes from icmp_seq=414 ttl=54 time=61685.132 ms
64 bytes from icmp_seq=415 ttl=54 time=60885.822 ms
64 bytes from icmp_seq=416 ttl=54 time=60366.599 ms
64 bytes from icmp_seq=417 ttl=54 time=60080.570 ms
64 bytes from icmp_seq=418 ttl=54 time=59211.712 ms
64 bytes from icmp_seq=419 ttl=54 time=58520.336 ms
64 bytes from icmp_seq=420 ttl=54 time=57832.112 ms
--- ping statistics ---
491 packets transmitted, 137 packets received, 72.1% packet loss
round-trip min/avg/max/stddev = 4911.674/57951.524/100173.596/21656.897 ms
13inch:pay2c.Xyz tom$

SHA1 Collision detected on Github

About 9 days ago something incredibly unlikely happened... something so rare that

If you had five million programmers each generating one commit per second, your chances of generating a single accidental collision before the Sun turns into a red giant and engulfs the Earth is about 50%.

A few weeks ago, researchers announced SHAttered, the first collision of the SHA-1 hash function, at Github. Similar to how a Bitcoin is a series of zeroes in a long row discovered by gradually adding static noise to the signal, this collission is likely a big chunk of random characters and noise.

Amazingly this event now has it's own website, and Y2K style frenzied rush to swap out sha1 for sha256/512. Never fear though because as they say:

Today, many applications still rely on SHA-1, even though theoretical attacks have been known since 2005, and SHA-1 was officially deprecated by NIST in 2011. We hope our practical attack on SHA-1 will increase awareness and convince the industry to quickly move to safer alteratives, such as SHA-256.

Try This At Home?

This attack required over 9,223,372,036,854,775,808 SHA1 computations. This took the equivalent processing power as 6,500 years of single-CPU computations and 110 years of single-GPU computations. So give it a go yourself (hehe) the source code is available.

What about SHA256 any chances there of a collision?

The hash input space of SHA256, which to be honest is not something I think I understand because I thought all hash functions have infinite input space, is something like this many terabytes:


By my calculations, to get even a slim 0.0000001% chance of a collision with SHA256 you'd need to run through 4.8×10 to 29 of hash runs, or this many:


That's just for a 0.0000001% chance of collision.


Learn To Code Hands-on Computer Tuition

Tom Atkinson - Director, Tomachi Corp.

Tom Atkinson - Director, Tomachi Corp.

Six Week and One-day Classes with Tom

Tomachi Corporation has developed a series of hands-on six week online courses with weekly webinar and 20 minute catch-up phone call:

Week 1 - Course overview: Intro to programming, Database-driven websites with Linux, Boost My Business Quick, and Launch Your Own Central Bank and Mint Your Own ERC20 Compliant Ethereum Coin.

    • Small class sizes run via Google Hangouts
    • Content tailored to your knowledge level
    • Requires only macOS Windows or Linux and internet access
    • Step by step class walk throughs
    • To enrol complete the survey below...

Create your own user feedback survey


For enrolments please fill in the form above ^^^, if it does not display then try this SurveyMonkey link

Once that survey is complete grab yourself a slot (only 80 available!) on the next available webinar

Reserve Webinar Seat RSVP

Bring Your Own Laptop - Short 6 week Computer Courses
Tomachi Corp needs to do some basic market research… which course would you prefer?

Router Hardening & Lockdown

The following guidelines are distilled from Apple's handy page for it's customers on how to secure their Wifi routers. I've shrunk it down to the minimum:

  • Up to date Wi–Fi router firmware
  • Hope that all Wi–Fi devices you want to use support the settings (WPA2)
  • Back up your Wi–Fi router settings
  • After changing Wifi password, do a Forget or Remove the Wi-Fi settings from all devices
  • You can configure an AirPort Base Station with AirPort Utility. If you have a different router, refer to the manual or to the manufacturer's website to learn how to change the settings.

Use the settings below for best performance, security, and reliability.


The SSID, or network name, identifies your Wi-Fi network to users and other Wi-Fi devices.

Best: Hidden network
Better: Any unique name
Default: SSID name (eg "Vodafone") may be shared by others (not good)

Choose a name that's unique to your network and isn't shared by other nearby networks or other networks you are likely to encounter. If your router came with a default SSID (network name), it's especially important that you change it to a different, unique name. Some common default SSID names to avoid are "linksys", "netgear", "NETGEAR", "dlink", "wireless", "2wire", and "default".

If your SSID isn't unique, Wi-Fi devices will have trouble identifying your network. This could cause them to fail to automatically connect to your network, or to connect to other networks sharing the same SSID. Also, it might prevent Wi-Fi devices from using all routers in your network (if you have more than one Wi-Fi router), or prevent them from using all available bands (if you have a dual-band Wi-Fi router).

Hidden network

Hidden networks don't broadcast their SSID over Wi-Fi. This option might also be incorrectly referred to as a "closed" network, and the corresponding non-hidden state might be referred to as "broadcast" or "open".

Set to: Disabled

Details: Because hidden networks don't broadcast their SSID, it's harder for devices to find them, which can result in increased connection time and can reduce the reliability of auto-connection. Hiding a network doesn't secure your Wi-Fi network, because the SSID is still available through other mechanisms. Security is enforced by a different setting (see Security below).

MAC address authentication or filtering

Restricts access to a Wi-Fi router to devices with specific MAC (Media Access Control) addresses.

Set to: Disabled

Details: When enabled, this feature allows a user to configure a list of MAC addresses for the Wi-Fi router, and restrict access to devices with addresses that are on the list. Devices with MAC addresses not on the list will fail to associate to the Wi-Fi network. Unfortunately, device MAC addresses can be easily changed, so this can't be relied upon to prevent unauthorised access to the network. Security should be enforced by a different setting (see Security below).

iOS 8 and later uses a randomised Media Access Control (MAC) address when running Wi-Fi scans. The scans are conducted when a device isn't associated with a Wi-Fi network and its processor is asleep. A device’s processor goes to sleep shortly after the screen is turned off. Wi-Fi scans are run to determine if a user can connect to a preferred Wi-Fi network. Enhanced Wi-Fi scans are run when a device uses Location Services for apps that use geofences, like location-based reminders, which determine if the device is near a specific location.


The security setting controls the type of authentication and encryption used by your Wi-Fi router. This setting allows you to control access to your wireless network, as well as to specify the level of privacy you'd like to have for data you send over the air.

Set to: WPA2 Personal (AES)

Details: WPA2 Personal (AES) is currently the strongest form of security offered by Wi-Fi products, and is recommended for all uses. When enabling WPA2, be sure to select a strong password, one that cannot be guessed by third parties.

If you have older Wi-Fi devices on your network that don't support WPA2 Personal (AES), a good second choice is WPA/WPA2 Mode (often referred to as WPA Mixed Mode). This mode will allow newer devices to use the stronger WPA2 AES encryption, while still allowing older devices to connect with older WPA TKIP-level encryption. If your Wi-Fi router doesn't support WPA/WPA2 Mode, WPA Personal (TKIP) mode is the next best choice.

Using WEP isn't recommended for compatibility, reliability, performance, and security reasons. WEP is insecure and functionally obsolete. Use TKIP if you must choose between it and WEP.

For reference, "None" or unsecured mode, provides no authentication or encryption. If you use this security mode, anyone will be able to join your Wi-Fi network, use your Internet connection, or access any shared resource on your network. Also, anyone will be able to read any traffic you send over the network. For these reasons, this security mode isn't recommended.

Due to serious security weaknesses, the WEP and WPA TKIP encryption methods are deprecated and strongly discouraged. These modes should  be used only if it is necessary to support legacy Wi-Fi devices that don't support WPA2 AES and cannot be upgraded to support WPA2 AES. Devices using these deprecated encryption methods won't be able to take full advantage of 802.11n performance and other features. Due to these issues the Wi-Fi Alliance has directed the Wi-Fi industry to phase out WEP and WPA TKIP.

2.4 GHz Radio Mode

This setting controls which versions of the 802.11a/b/g/n standard the network uses for wireless communication on the 2.4 GHz band. Newer standards (802.11n) support faster transfer rates, and older standards provide compatibility with older devices and additional range.

Set to: 802.11b/g/n

Details: Routers that support 802.11n should be configured for 802.11b/g/n for maximum speed and compatibility. Routers that only support 802.11g should be put in 802.11b/g mode, while those that support only 802.11b can be left in 802.11b mode. Different Wi-Fi routers support different radio modes, so the exact setting will vary depending on the Wi-Fi router in use. In general, enable support for all modes. Devices will then automatically select the fastest commonly supported mode to communicate. Note that choosing a subset of the available modes will prevent some devices from connecting (for example, 802.11b/g devices will be unable to connect to a Wi-Fi router in 802.11n-only mode). Also, choosing a subset of the available modes might cause interference with nearby legacy networks, and might cause nearby legacy devices to interfere with your network.

5 GHz Radio Mode

This setting controls which versions of the 802.11a/b/g/n standard the network uses for wireless communication on the 5 GHz band. Newer standards support faster transfer rates, and older standards provide compatibility with older devices and additional range.

Set to: 802.11a/n

Details: Routers that support 802.11n should be configured for 802.11a/n mode for maximum speed and compatibility. Routers that only support 802.11a can be left in 802.11a mode. Different Wi-Fi routers support different radio modes, so the exact setting will vary depending on the Wi-Fi router in use. In general, enable support for all modes. Devices will then automatically select the fastest commonly supported mode to communicate. Note that choosing a subset of the available modes will prevent older devices from connecting (for example, 802.11a devices will be unable to connect to a Wi-Fi router in 802.11n-only mode). In addition, choosing a subset of the available modes might cause interference with nearby legacy networks, and might cause nearby legacy devices to interfere with your network.


This setting controls which channel your Wi-Fi router will use to communicate. "Auto" allows the Wi-Fi router to select the best channel automatically. You can also manually select a channel.

Set to: Auto

Details: For best performance, choose "Auto" mode and let the Wi-Fi router select the best channel. If this mode isn't supported by your Wi-Fi router, you'll need to manually select a channel. You should pick a channel that's free from other Wi-Fi routers and other sources of interference. Read about possible sources of interference.

2.4 GHz channel width

Channel width controls how large a "pipe" is available to transfer data. However, larger channels are more subject to interference and more prone to interfere with other devices. A 40 MHz channel is sometimes referred to as a wide channel, with 20 MHz channels referred to as narrow channels.

Set to: 20 MHz

Details: Use 20 MHz channels in the 2.4 GHz band. Using 40 MHz channels in the 2.4 GHz band can cause performance and reliability issues with your network, especially in the presence of other Wi-Fi networks and other 2.4 GHz devices. 40 MHz channels might also cause interference and issues with other devices that use this band, such as Bluetooth devices, cordless phones, neighbouring Wi-Fi networks, and so on. Note that not all routers support 40 MHz channels, especially in the 2.4 GHz band. If they are not supported, the router will use 20 MHz channels.

5 GHz channel width

Channel width controls how large a "pipe" is available to transfer data. Larger channels are more prone to interference, and more likely to interfere with other devices. Interference is less of an issue in the 5 GHz band than in the 2.4 GHz band. A 40 MHz channel is sometimes referred to as a wide channel, with 20 MHz channels referred to as narrow channels.

Set to: For 802.11n access points, set the 5GHz band to 20 MHz and 40 MHz. For 802.11ac access points, set the 5GHz band to 20 MHz, 40 MHz, and 80 MHz.

Details: For best performance and reliability, enable support for all channel widths. This allows devices to use the largest width they support, which results in optimal performance and compatibility. Not all client devices support 40 MHz channels, so don't enable 40 MHz-only mode. Devices that support only 20 MHz channels won't be able to connect to a Wi-Fi router in 40 MHz-only mode. Similarly, don't enable 80 MHz-only mode, or only clients capable of 802.11ac will be able to connect. Also, not all routers support 40 MHz and 80 MHz channels. A router that doesn't will use 20 MHz channels.


The Dynamic Host Configuration Protocol (DHCP) assigns addresses that identify devices on your network. Once assigned, devices use these addresses to communicate with each other and with computers on the Internet. The functionality of a DHCP server can be thought of as similar to a phone company handing out phone numbers, which customers then use to call other people.

Set to: Only one DHCP server per network

Details: There should be only one DHCP server on your network. This DHCP server might be built in to your DSL or cable modem, a standalone router, or integrated with your Wi-Fi router. In any case, only one device should act as a DHCP server on your network. If more than one device has it enabled, you will likely see address conflicts and will have issues accessing the Internet or other resources on your network.


Network address translation (NAT) translates between addresses on the Internet and those on a local network. The functionality of a NAT provider is like that of a worker in an office mail room who takes a business address and an employee name on incoming letters and replaces them with the destination office number in a building. This allows people outside the business to send information to a specific person in the building.

Set to: Enabled only on your router; only one device at most should provide NAT services on the network.

Details: Generally, NAT should only be enabled on the device acting as a router for your network. This is usually either your DSL or cable modem, or a standalone router, which might also act as your Wi-Fi router. If NAT is enabled on more than one device—"double NAT"—you'll likely have trouble accessing certain Internet services, such as games, Voice Over IP (VoIP), and Virtual Private Network (VPN), and communicating across the different levels of NAT on the local network.

WMM (Wi-Fi Multimedia)

WMM prioritises network traffic according to four access categories: voice, video, best effort, and background.

Set to: Enabled

Details: All 802.11n and 802.11ac access points should have WMM enabled in their default configuration. Disabling WMM can cause issues for the entire network, not just Apple products on the network.

Information about products not manufactured by Apple, or independent websites not controlled or tested by Apple, is provided without recommendation or endorsement. Apple assumes no responsibility with regard to the selection, performance, or use of third-party websites or products. Apple makes no representations regarding third-party website accuracy or reliability. Risks are inherent in the use of the Internet. Contact the vendor for additional information. Other company and product names may be trademarks of their respective owners.

UFA Civil Liberties and Privacy Report on the NSA

In August 2013, President Obama announced several initiatives to give the public greater confidence in the oversight of the NSA's foreign intelligence programs. The creation of a full-time Civil Liberties and Privacy Officer at NSA was among the reforms cited, and recently they have issued this report PDF ; the following image is taken from it:

US Freedom Act "Frontdooring" procedure

US Freedom Act "Frontdooring" procedure

To illustrate the process, assume an NSA intelligence analyst identifies or learns that phone number (202) 555-1234 is being used by a suspected international terrorist. This is the “specific selection term” or “selector” that will be submitted to the FISC (or the Attorney General in an emergency) for approval using the RAS standard. Also assume that, through NSA’s examination of metadata produced by the provider(s) or in NSA’s possession as a result of the Agency’s otherwise lawfully permitted signals intelligence activities (e.g., activities conducted pursuant to Section 1.7(c)(1) of Executive Order 12333, as amended), NSA determines that the suspected terrorist has used a 202 area code phone number to call (301) 555-4321. The phone number with the 301 area code is a “first-hop” result. In turn, assume that further analysis or production from the provider(s) reveals (301) 555-4321 was used to call (410) 555-5678. The number with the 410 area code is a “second-hop” result.

Once the one-hop results are retrieved from the NSA’s internal holdings, the list of FISC-approved specific selection terms, along with NSA’s internal one-hop results, are submitted to the provider(s). The provider(s) respond to the request based on the data within their holdings with CDRs that contain FISC-approved specific selection terms or the one-hop selection term. One-hop returns from providers are placed in NSA’s holdings and become part of subsequent query requests, which are executed on a periodic basis. Historical bulk data collected under Section 215 of the USA PATRIOT Act will never be included when querying internal holdings.

Absent information to the contrary, NSA must presume that each user of each of the phone numbers in the above example is a U. S. person, since each phone number has a U.S. area code. NSA’s FISC- approved minimisation procedures for the USA FREEDOM Act prohibit NSA from disseminating any known or presumed U.S. person information that does not constitute foreign intelligence information related to international terrorism or information necessary to understand foreign intelligence information related to international terrorism or assess its importance or is not evidence of a crime. In addition, the minimisation procedures require NSA to destroy promptly any CDRs that are determined not to contain foreign intelligence information. The procedures also set a maximum retention period for CDRs obtained pursuant to the FISC’s orders of no more than 5 years after initial delivery to NSA, except that NSA may retain any CDR (or information derived therefrom) that was the basis of a properly approved dissemination of foreign intelligence information.

How the NSA collects your data

How the NSA collects your data

Filtering out hostname spam in Google Analytics

This is the weirdest kind of spam, I guess that's what it is; Intended to make the people who read the reports check the fake sounding hostnames? Probably so they can get a drive-by infection - makes sense I guess since these are people with websites, quite a good target.

I made a regular expression to help me filter out hostname spam from my reports:

First I exclude my own sites using this regex, the customisations are mostly to deal with .com and .co since many of my sites use the quite unique NZ TLD:


This provides a filtered 5 year view with these spam domains showing - great!

Hostname Spam in Google Analytics

Hostname Spam in Google Analytics

From here I created the following regex to outright block TLDs that I don't use, and even the (not set) hostnames I found:

not set|us$|cn$|\.ru$|info$|eu$|br

Luckily the block known bots feature works so well, and removes the need for this type of action, however, this can be useful for looking at historic reports.

GA Bot Filtering

GA Bot Filtering

Tom recommends Mac users apply this Safari security update

Safari 9.1 About box

Safari 9.1 About box

Safari 9.1.1 About box

Safari 9.1.1 About box

BREAKING NEWS: You can tell this update is a biggie by how tight lipped and to the point Apple is with it and also by the appearance of the words "zero day" in the text of the update notes - meaning Apple has exactly zero days to fix this one because it was discovered in the wild, likely on many if not all Macs right now - the release seems to come yesterday (today), New Zealand is +11 GMT.

This update from 9.1 to 9.1.1 prevents "drive by" exploitation of Safari for remote code execution, which IN ENGLISH means all you need to do is visit a bad guy website (or a good website somehow infected with bad guy code) and the bad guys can run arbitrary software they wrote on your machine without permission or

If your curious about computer security I recommend reading Apples sections.

List of Panama Papers Countries

This tables shows which countries used Monsecca the most: China, Honk Long, Taiwan, United States, Singapore, Russia....

An amazing example of a spectacular data breach would have to be the Panama Papers. For fun I downloaded the data and had a play to get the following tables. Source:

Panama Papers Countries - Total Mentions by Country

  Grand Total 150,162
Rank Country Mentions
1 China 28,073
2 Hong Kong 21,041
3 Taiwan, Province of China 14,610
4 United States 6,860
5 Singapore 5,728
6 Russian Federation 5,534
7 United Kingdom 4,836
8 Virgin Islands, British 4,125
9 Indonesia 3,253
10 Switzerland 3,208
11 Jersey 3,013
12 Panama 2,732
13 Malaysia 2,722
14 Cyprus 2,385
15 United Arab Emirates 2,081
16 Guernsey 1,671
17 South Africa 1,445
18 Brazil 1,438
19 Australia 1,409
20 Canada 1,312
21 Thailand 1,285
22 Isle of Man 1,171
23 Peru 1,069
24 Bahamas 954
25 Uruguay 893
26 France 873
27 Seychelles 871
28 Israel 865
29 India 828
30 Japan 806
31 Argentina 773
32 Italy 720
33 Luxembourg 699
34 Liechtenstein 690
35 Colombia 679
36 Cayman Islands 646
37 Philippines 638
38 Mauritius 624
39 Ecuador 617
40 Spain 601
41 Monaco 589
42 Turkey 559
43 Ukraine 558
44 Venezuela, Bolivarian Republic of 494
45 Lebanon 463
46 New Zealand 460
47 Germany 442
48 Gibraltar 440
49 Saudi Arabia 408
50 Not identified 356
51 Saint Kitts and Nevis 347
52 Netherlands 320
53 Greece 313
54 Malta 306
55 Macao 299
56 Belgium 293
57 Guatemala 283
58 Belize 274
59 Jordan 273
60 Costa Rica 267
61 Ireland 245
62 Kazakhstan 243
63 Czech Republic 233
64 Zimbabwe 225
65 Bermuda 218
66 Egypt 218
67 Mexico 215
68 Sweden 193
69 Iceland 185
70 Viet Nam 185
71 Samoa 182
72 Korea, Democratic People's Republic of 181
73 Portugal 175
74 Chile 160
75 Dominican Republic 157
76 Pakistan 155
77 Korea, Republic of 154
78 Latvia 153
79 Cook Islands 152
80 Haiti 152
81 Hungary 150
82 Kenya 148
83 Niue 139
84 Poland 136
85 Nigeria 130
86 Iran, Islamic Republic of 124
87 Kuwait 123
88 Anguilla 115
89 Austria 115
90 Azerbaijan 111
91 Romania 103
92 Bulgaria 102
93 Uzbekistan 98
94 Marshall Islands 97
95 Norway 97
96 Curaçao 94
97 Dominica 90
98 Belarus 87
99 Botswana 82
100 Estonia 82
101 Moldova, Republic of 76
102 Georgia 73
103 Virgin Islands, U.S. 69
104 Bahrain 68
105 El Salvador 65
106 Denmark 64
107 Qatar 63
108 Brunei Darussalam 60
109 Barbados 57
110 Vanuatu 54
111 Sri Lanka 53
112 Turks and Caicos Islands 53
113 Morocco 51
114 Slovenia 50
115 Finland 49
116 Chad 48
117 Serbia 48
118 Lao People's Democratic Republic 46
119 Saint Vincent and the Grenadines 46
120 Libya 43
121 Mongolia 43
122 Bangladesh 42
123 Liberia 42
124 Andorra 41
125 Syrian Arab Republic 41
126 Angola 39
127 Antigua and Barbuda 39
128 Cameroon 38
129 Central African Republic 38
130 Tanzania, United Republic of 38
131 Congo, the Democratic Republic of the 36
132 Oman 36
133 Bolivia, Plurinational State of 35
134 Lithuania 35
135 Zambia 34
136 Malawi 33
137 Armenia 32
138 Croatia 32
139 Paraguay 32
140 Ghana 30
141 Myanmar 30
142 Slovakia 29
143 Côte d'Ivoire 27
144 Gabon 27
145 Tunisia 26
146 Cambodia 25
147 Jamaica 25
148 Mozambique 25
149 Montenegro 24
150 Somalia 24
151 Albania 23
152 Namibia 23
153 Iraq 22
154 Algeria 20
155 Cuba 19
156 Swaziland 19
157 Aruba 18
158 Fiji 18
159 French Polynesia 17
160 Turkmenistan 16
161 Mali 15
162 Nauru 15
163 Saint Lucia 15
164 Trinidad and Tobago 15
165 Honduras 14
166 Nepal 14
167 Madagascar 13
168 Maldives 13
169 Cape Verde 12
170 Senegal 12
171 Tajikistan 12
172 Palestine, State of 11
173 American Samoa 10
174 Nicaragua 10
175 Puerto Rico 10
176 Benin 8
177 Uganda 8
178 Guinea 7
179 Sudan 7
180 Suriname 7
181 Yemen 6
182 Bosnia and Herzegovina 5
183 Grenada 5
184 Guam 5
185 Kyrgyzstan 5
186 Papua New Guinea 5
187 Gambia 4
188 Martinique 4
189 Sierra Leone 4
190 Djibouti 3
191 Guyana 3
192 Macedonia, the Former Yugoslav Republic of 3
193 Rwanda 3
194 Sint Maarten (Dutch part) 3
195 Togo 3
196 Ethiopia 2
197 Lesotho 2
198 Niger 2
199 Tonga 2
200 Bhutan 1
201 Burkina Faso 1
202 Equatorial Guinea 1
203 Guinea-Bissau 1
204 Norfolk Island 1
205 Northern Mariana Islands 1
206 Réunion 1
207 Saint Martin (French part) 1
208 San Marino 1
209 Solomon Islands 1

Encrypted Messaging Tools for Pretty Good Privacy

In this day and age, with government spying; multi-nationals poised to take over; and hacker spies trying to get your blueprints, it pays to stay safe! Here is a selection of messaging encryption tools. Wickr is the best for ease of use because key management is fully automatic, and it has guarantees of self destructing messages, and perfect forward secrecy style messaging that has new keys for each message sent. For the more old-school types, it's worth looking at PGP which started off as "Pretty Good Privacy" and has always had a good reputation. Later OpenPGP came along, from the world of open source. The trick with PGP is to deliver your key to people somehow. Say in the sig of your email, or in fact, linked from a 3rd party server using a short link.

The hard part with PGP is sending your public keys around the place. If you want to make it easy, log it with the PGP Global Directory. Then you can easily tell people that your public key can be accessed by ref ID is 6F1D0462 (to send an email to my [email protected] address on my laptop), without ever having prior contact with me. Handy for whistleblower journo types. Good for signing files and so forth. Or whack it on your website like I did below.

  • Wickr Top Secret Messenger is easiest to use, free, and most secure in many ways
    • Free here for Android, Blackberry, iphone, Mac. PC, Linux
    • Messages self destruct and are sent with new keys everytime
    • Even if keys for one message are “brute forced” this only shows one message
  • S/MIME is likely to become the successor to OpenPGP
  • OpenPGP and GPG named tools allow you to encrypt and sign files and emails
  • Use an https-everywhere browser plugin
    • These will ping the site to check if they have secure version available and switch to it
  • Install Tor Browser 
  • Use a VPN
    • Hides your meta data collection
    • Makes it impossible to see if you are even using Wickr, PGP, Tor etc by eavesdroppers
    • Encrypts your entire internet and tunnels it out to another place on the net

Whats the difference between S/MIME and OpenPGP?

This post from a cryptography called Thomas Pornin puts it very nicely:

Summary: S/MIME and PGP both provide "secure emailing" but use distinct encodings, formats, user tools, and key distribution models.

S/MIME builds over MIME and CMS. MIME is a standard way of putting arbitrary data into emails, with a "type" (an explicit indication of what the data is supposed to mean) and gazillions of encoding rules and other interoperability details. CMS means "Cryptographic Message Syntax": it is a binary format for encrypting and signing data. CMS relies on X.509 certificates for public key distribution. X.509 was designed to support top-down hierarchical PKI: a small number of "root certification authorities" issue (i.e. sign) certificates for many users (or possibly intermediate CA); a user certificate contains his name (in an email context, his email address) and his public key, and is signed by a CA. Someone wanting to send an email to Bob will use Bob's certificate to get his public key (needed to encrypt the email, so that only Bob will be able to read it); verifying the signature on Bob's certificate is a way to make sure that the binding is genuine, i.e. this is really Bob's public key, not someone else's public key.

PGP is actually an implementation of the OpenPGP standard (historically, OpenPGP was defined as a way to standardise what the pre-existing PGP software did, but there now are other implementations, in particular the free opensource GnuPG). OpenPGP defines its own encryption methods (similar in functionality to CMS) and encoding formats, in particular an encoding layer called "ASCII Armor" which allows binary data to travel unscathed in emails (but you can also mix MIME and OpenPGP). For public key distribution, OpenPGP relies on Web of Trust: you can view that as a decentralised PKI where everybody is a potential CA. The security foundation of WoT is redundancy: you can trust a public key because it has been signed by many people (the idea being that if an attacker "cannot fool everybody for a long time").

Theoretically, in an enterprise context, WoT does not work well; the X.509 hierarchical PKI is more appropriate, because it can be made to match the decisional structure of the envisioned companies, whereas WoT relies on employees making their own security policy decisions.

In practice, although most emailing softwares already implement S/MIME (even Outlook Express has implemented S/MIME for about one decade), the certificate enrolment process is complex with interactions with external entities, and requires some manual interventions. OpenPGP support usually requires adding a plugin, but that plugin comes with all that is needed to manage keys. The Web of Trust is not really used: people exchange their public keys and ensure binding over another medium (e.g. spelling out the "key fingerprint" -- a hash value of the key -- over the phone). Then people keep a copy of the public keys of the people they usually exchange emails with (in the PGP "keyring"), which ensures appropriate security and no hassle. When I need to exchange secure emails with customers, I use PGP that way.

OpenPGP is also used, as a signature format, for other non-email tasks, such as digitally signing software packages in some Linux distributions (at least Debian and Ubuntu do that).

Tomachi Corp's Public Key 6F1D0462

Tom Atkinson <[email protected]>

You can use this key to encrypt and secure our messages with OpenPGP software on your computer after importing the public key into your local OpenPGP Key-Manager.

Download Tomachi Public Key (6F1D0462)

Comment: GPGTools -
Comment: Tomachi 13inch Comment


How Safe Is Your Email? Gmail Transport Encryption by Country

Google has published data from 47,354 domains that it exchanges email with, showing what fraction of the traffic is protected from the view of packet sniffers in transit with TLS encryption. I filtered and crunched the data in Excel into this pivot table to show summaries per top level domain (TLD), broken down by traffic region. It's an interesting snapshot of the state of the internet at this particular juncture in our history. Ecommerce started in 1996 with the first public release by Netscape of SSL v3, yet here we are in 2016 and some emails are still being sent in the clear. This is fast changing though with the revelations of Edward Snowden. Formats available: Excel working file with raw data; png image2 page PDF; google sheets.




Image Version

Email Encryption by Country 2016

Email Encryption by Country 2016

 Attribution CC BY Creative Commons License

The XLSX file, Image, and Google Doc on this page (How Safe Is Your Email? Gmail Transport Encryption by Country) are released free of charge.

This license lets others distribute, remix, tweak, and build upon your work, even commercially, as long as they credit Tomachi Corporation for the original creation.

License Deed | Legal Code