Question about --skip and --limit
#1
I am running some -m 14000 -a 3 searches with multiple cyphertexts and same plaintext.
Recovered........: 0/3 (0.00%) Digests, 0/1 (0.00%) Salts

I've noticed that performance is slower when searching multiple cyphertexts and best performance is delivered when searching only one key. My question is:

As soon as I recover some of the keys, can I stop the search and continue from the last restore point (with --skip parameter), but now search only for one or two keys? So this comes down to, is the --skip value compatible when the number of cyphertexts changes? Reminding that plaintext is the same.
#2
As the number of remaining hashes drops, performance per hash should increase.

In other words, once only one hash remains, performance should be the same as if the target was only a single hash in the first place.
~
#3
This is true, but running with only one hash/salt triggers some optimizations that, at least for mode 14000, increase performance by 30%. And these are not enabled while running. So if I search for 3 hashes and 2 are recovered, stopping and running with only 1 makes sense. But is the keyspace compatible? If searching 3 hashes reached 50%, can I stop and continue with only one hash for the rest 50%?
#4
For example:
Code:
./hashcat64.bin --restore
hashcat (v4.0.1) starting in restore mode...

* Device #1: WARNING! Kernel exec timeout is not disabled.
            This may cause "CL_OUT_OF_RESOURCES" or related errors.
            To disable the timeout, see: https://hashcat.net/q/timeoutpatch
OpenCL Platform #1: NVIDIA Corporation
======================================
* Device #1: GeForce GTX 1060 6GB, 1517/6069 MB allocatable, 10MCU

Hashes: 5 digests; 5 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Applicable optimizers:
* Zero-Byte
* Precompute-Final-Permutation
* Not-Iterated
* Single-Salt
* Brute-Force

Password length minimum: 8
Password length maximum: 8

Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger disabled.

INFO: Removed 4 hashes found in potfile.

[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => s

Session..........: hashcat
Status...........: Running
Hash.Type........: DES (PT = $salt, key = $pass)
Hash.Target......: hashes.txt
Time.Started.....: Sun Dec 31 09:45:22 2017 (8 secs)
Time.Estimated...: Thu Jan 25 09:44:32 2018 (24 days, 23 hours)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: -1 charsets/DES_full.charset, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#1.....:  7442.8 MH/s (89.44ms)
Recovered........: 4/5 (80.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 55981492255326208/72057594037927936 (77.69%)
Rejected.........: 0/55981492255326208 (0.00%)
Restore.Point....: 26694026239/34359738368 (77.69%)
Candidates.#1....: $HEX[73bcc4fe0eb567c7] -> $HEX[fece0bfb0e0473c7]
HWMon.Dev.#1.....: Temp: 56c Fan:  0% Util: 99% Core:1949MHz Mem:3802MHz Bus:16

As you can see, when starting it sees 5 hashes and doesn't enable optimization * Single-Hash
But after that it skips 4 hashes found in potfile (already recovered) and runs with only one hash, but without the Single-Hash optimization, getting 7442,8 MH/s. Now if I edit hashes.txt and only leave one hash and run --restore, I get:

Code:
./hashcat64.bin --restore
hashcat (v4.0.1) starting in restore mode...

* Device #1: WARNING! Kernel exec timeout is not disabled.
             This may cause "CL_OUT_OF_RESOURCES" or related errors.
             To disable the timeout, see: https://hashcat.net/q/timeoutpatch
OpenCL Platform #1: NVIDIA Corporation
======================================
* Device #1: GeForce GTX 1060 6GB, 1517/6069 MB allocatable, 10MCU

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Applicable optimizers:
* Zero-Byte
* Precompute-Final-Permutation
* Not-Iterated
* Single-Hash
* Single-Salt
* Brute-Force

Password length minimum: 8
Password length maximum: 8

Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger disabled.

[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => s

Session..........: hashcat
Status...........: Running
Hash.Type........: DES (PT = $salt, key = $pass)
Hash.Target......: xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx
Time.Started.....: Sun Dec 31 09:49:16 2017 (2 mins, 17 secs)
Time.Estimated...: Fri Jan 19 11:51:58 2018 (19 days, 2 hours)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: -1 charsets/DES_full.charset, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#1.....:  9748.4 MH/s (68.25ms)
Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 55984136344567808/72057594037927936 (77.69%)
Rejected.........: 0/55984136344567808 (0.00%)
Restore.Point....: 26694681599/34359738368 (77.69%)
Candidates.#1....: $HEX[7361f8fe0e0473c7] -> $HEX[fe0ef8fb0e541ac7]
HWMon.Dev.#1.....: Temp: 65c Fan: 37% Util: 99% Core:1936MHz Mem:3802MHz Bus:16

Performance increases 31%. But is it a valid search?
#5
Huh - fair point!

My understanding of how --restore works is that it's mostly a record of what command-line options were used, for the purpose of reinvoking hashcat. So I think that its application of additional single-hash optimizations at the point of restoring should be fine, and the cracking work being done in the restored session should be perfectly valid.
~