<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Knight_shift</id>
	<title>Knight shift - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Knight_shift"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Knight_shift&amp;action=history"/>
	<updated>2026-06-27T01:06:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0-wmf.28</generator>
	<entry>
		<id>https://en.formulasearchengine.com/index.php?title=Knight_shift&amp;diff=7797&amp;oldid=prev</id>
		<title>en&gt;ChrisGualtieri: General Fixes using AWB</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Knight_shift&amp;diff=7797&amp;oldid=prev"/>
		<updated>2013-11-02T19:39:32Z</updated>

		<summary type="html">&lt;p&gt;General Fixes using &lt;a href=&quot;/index.php?title=Testwiki:AWB&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Testwiki:AWB (page does not exist)&quot;&gt;AWB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;In [[cryptography]], a &amp;#039;&amp;#039;&amp;#039;hard-core predicate&amp;#039;&amp;#039;&amp;#039; of a [[one-way function]] &amp;#039;&amp;#039;f&amp;#039;&amp;#039; is a [[Predicate (mathematics)|predicate]] &amp;#039;&amp;#039;b&amp;#039;&amp;#039; (i.e., a function whose output is a single bit) which is easy to compute given &amp;#039;&amp;#039;x&amp;#039;&amp;#039; but is hard to compute given &amp;#039;&amp;#039;f(x)&amp;#039;&amp;#039;.  In formal terms, there is no [[Bounded-error probabilistic polynomial|probabilistic polynomial-time algorithm]] that computes &amp;#039;&amp;#039;b(x)&amp;#039;&amp;#039; from &amp;#039;&amp;#039;f(x)&amp;#039;&amp;#039; with probability [[negligible function (cryptography)|significantly greater]] than one half over random choice of &amp;#039;&amp;#039;x&amp;#039;&amp;#039;.&amp;lt;ref name=GoldwasserBellare&amp;gt;[[Shafi Goldwasser|Goldwasser, S.]] and [[Mihir Bellare|Bellare, M.]] [http://cseweb.ucsd.edu/~mihir/papers/gb.html &amp;quot;Lecture Notes on Cryptography&amp;quot;]. Summer course on cryptography, MIT, 1996-2001&amp;lt;/ref&amp;gt;{{rp|34}}&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;hard-core function&amp;#039;&amp;#039;&amp;#039; can be defined similarly.&lt;br /&gt;
&lt;br /&gt;
A hard-core predicate captures &amp;quot;in a concentrated sense&amp;quot; the hardness of inverting &amp;#039;&amp;#039;f&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
While a one-way function is hard to invert, there are no guarantees about the feasibility of computing partial information about the [[preimage]] &amp;#039;&amp;#039;c&amp;#039;&amp;#039; from the image &amp;#039;&amp;#039;f(x)&amp;#039;&amp;#039;. For instance, while [[RSA (algorithm)|RSA]] is conjectured to be a one-way function, the [[Jacobi symbol]] of the preimage can be easily computed from that of the image.&amp;lt;ref name=GoldwasserBellare /&amp;gt;{{rp|121}}&lt;br /&gt;
&lt;br /&gt;
It is clear that if a [[injective function|one-to-one function]] has a hard-core predicate, then it must be one way.  [[Oded Goldreich]] and [[Leonid Levin]] (1989) showed how every one-way function can be trivially modified to obtain a one-way function that has a specific hard-core predicate.&amp;lt;ref name=GoldLevin&amp;gt;O. Goldreich and L.A. Levin, [http://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.95.2079&amp;amp;rep=rep1&amp;amp;type=pdf A Hard-Core Predicate for all One-Way Functions], STOC 1989, pp25&amp;amp;ndash;32.&amp;lt;/ref&amp;gt;  Let &amp;#039;&amp;#039;f&amp;#039;&amp;#039; be a one-way function. Define &lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;g(x, r)&amp;#039;&amp;#039; = &amp;#039;&amp;#039;(f(x), r)&amp;#039;&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
where the length of &amp;#039;&amp;#039;r&amp;#039;&amp;#039; is the same as that of &amp;#039;&amp;#039;x&amp;#039;&amp;#039;. Let &amp;lt;math&amp;gt;x_j&amp;lt;/math&amp;gt; denote the &amp;#039;&amp;#039;j&amp;#039;&amp;#039;&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; bit of &amp;#039;&amp;#039;x&amp;#039;&amp;#039; and  &amp;lt;math&amp;gt;r_j&amp;lt;/math&amp;gt; the &amp;#039;&amp;#039;j&amp;#039;&amp;#039;&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; bit of &amp;#039;&amp;#039;r&amp;#039;&amp;#039;. Then&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;b(x, r) = \bigoplus_j x_j r_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is a hard core predicate of &amp;#039;&amp;#039;g&amp;#039;&amp;#039;.   Note that &amp;lt;math&amp;gt;b(x,r) = \langle x, r \rangle&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;\langle \cdot, \cdot \rangle&amp;lt;/math&amp;gt; denotes the standard [[Inner product space|inner product]] on the [[vector space]] &amp;lt;math&amp;gt;(\Z/2\Z)^n&amp;lt;/math&amp;gt;.  This predicate is hard-core due to computational issues; that is, it is not hard to compute because &amp;#039;&amp;#039;g(x, r)&amp;#039;&amp;#039; is [[information theory|information theoretically]] lossy.  Rather, if an algorithm exists to compute this predicate efficiently, then an algorithm exists to invert &amp;#039;&amp;#039;f&amp;#039;&amp;#039; efficiently.  A similar construction yields a hard-core function with &amp;#039;&amp;#039;log (|x|)&amp;#039;&amp;#039; output bits.{{Citation needed|date=January 2011}}&lt;br /&gt;
&lt;br /&gt;
It is sometimes the case that an actual bit of the input &amp;#039;&amp;#039;x&amp;#039;&amp;#039; is hard-core. For example, every single bit of inputs to the RSA function is a hard-core predicate of RSA and blocks of &amp;lt;math&amp;gt;O(\log |x|)&amp;lt;/math&amp;gt; bits of x are indistinguishable from random bit strings in polynomial time (under the assumption that the RSA function is hard to invert).&amp;lt;ref name=JohanNaslund&amp;gt;[[Johan Håstad|J. Håstad]], M. Naslund, [http://www.csc.kth.se/tcs/tfrutv99/rsabit.pdf The Security of all RSA and Discrete Log Bits (2004)]: Journal of the ACM (JACM), 2004.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hard-core predicates give a way to construct a [[CSPRNG|pseudorandom generator]] from any [[one-way permutation]]. If &amp;#039;&amp;#039;b&amp;#039;&amp;#039; is a hard-core predicate of a one-way permutation &amp;#039;&amp;#039;f&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;s&amp;#039;&amp;#039; is a random seed, then &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\left \{ b ( f^n ( s ) ) \right \}_n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is a pseudorandom bit sequence.&amp;lt;ref name=GoldwasserBellare /&amp;gt;{{rp|132}}&lt;br /&gt;
&lt;br /&gt;
Hard-core predicates of trapdoor one-way permutations (known as &amp;#039;&amp;#039;&amp;#039;trapdoor predicates&amp;#039;&amp;#039;&amp;#039;) can be used to construct [[semantic security|semantically secure]] public-key encryption schemes.&amp;lt;ref name=GoldwasserBellare /&amp;gt;{{rp|129}}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[List-decoding]] (describes list decoding; the core of the Goldreich-Levin construction of hard-core predicates from one-way functions can be viewed as an algorithm for list-decoding the [[Hadamard code]]).&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
* Oded Goldreich, &amp;#039;&amp;#039;Foundations of Cryptography vol 1: Basic Tools&amp;#039;&amp;#039;, Cambridge University Press, 2001.&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Hard-Core Predicate}}&lt;br /&gt;
[[Category:Pseudorandomness]]&lt;br /&gt;
[[Category:Theory of cryptography]]&lt;/div&gt;</summary>
		<author><name>en&gt;ChrisGualtieri</name></author>
	</entry>
</feed>