Welcome to the lecture series on VLSI advanced VLSI design course. Today, I will discuss about basics of VLSI test. During last lecture, we discussed about the test economics, why test is so important, how much it will cost if you apply a sequence of test vector onto your chip. And we discussed that it has two parts, one part is to generate the compact test set and then you have to apply that compact test set to each and every chip. And now when you apply test to each and every chip, it cost you something about 2 to 5 cents per second. That means, if you test your chip say for a minute, it may cost you about 5 dollars, sorry about 3 dollars and hence it is too expensive to apply a test for minutes. Therefore, we have to test our chip somewhere between few seconds to minutes. That is the reason for time. But we have also seen that if you want to apply functional test, so that means if you want to apply all sequence of test vectors that may be applicable to a chip, say a chip has n inputs, then there are 2 raise to the power n inputs you can apply. And today's chip have say hundreds of inputs, then it may take billion centuries. Now, you see the difference between the exhaustive test and reasonable time in which you can apply the test. So, there is a huge difference. Now, it is the responsibility of test engineers to bring down this exhaustive test to a test set which is available to a chip. This is which can be applied in reasonable time and it gives you almost similar confidence that you would have got from the exhaustive test. So, now here let us look at what are the various methodologies, how I can generate that compact test set that can be applied within few seconds. As I discussed earlier as well that how good your test set should be that depends on how much defect level that you can afford to. Like for example, for automotive applications, the kind of defective parts per million manufactured parts they are looking for are very, very low. Ideally, they want 0, but here that can be from somewhere from 1 to 10 defective parts per million manufactured parts are affordable. So, your test quality depends on what kind of DPPM figures you are looking at. Now, let us look at the test application process. So, you develop a compact test set that compact test set is stored on an automatic test equipment which is pretty expensive device. You apply that to your device under test, collect the test response and then bring back to the automatic test equipment. Automatic test equipment also stores the correct response of the chip and then it compare with the with the collected response. If there is a match the device is good, if there is a mismatch device is bad and then you have to throw that device out. So, this is the basic test methodology. Now, as I said that we will discuss in this lecture how we can generate this compact test set that can be applied in reasonable time. So, now look at what we want. Say I have a circuit under test, this circuit under test has say n inputs x 1 to x n. So, now here if I apply the input x 1 to x n the output say it has assume it as single output then it will evaluate as this function as f of x 1 x 2 x n when there is no fault. So, if say there is a fault or say there is a defect due to that defect the function may not evaluate same as this f. So, say this evaluates under the defective condition when I apply same input say x 1 x 2 x n the function will evaluate to f alpha. So, now the question is if this function which is defect free and the evaluation of function which is defective if both are same in that case here this input set cannot detect the defect, but if both of these are different in that case you can detect that device has defect. So, now our aim is to find out a set of or a sequence a input sequence that can detect all the defects which may possible in the device circuit under test. So, now and here the size of the sequence should be as small as possible and keep in mind we want to detect all the defect. Here I am using a word fault I will explain little bit later why we use word fault. So, for a while you can think of that fault and defects are synonym of each other, but keep in mind that we have interest only knowing whether a device under test is faulty or defective or it is defect free. We are not interested in diagnosing that what kind of defect or what kind of fault it has.  So, it will tell us whether the device is defective or device is defect free. So, as I said that I we want to develop a test sequence that can detect all the defect and one of the prime requirement is input x1 to xn can be the test for a given defect or given fault if it produces different output when there is a fault and without fault. So, that means here the function should be evaluated in different way that is the mandatory requirement. Now, if you look at if I have a circuit with three inputs in order to test that exhaustively what I need I exhaustively apply all the possible inputs and check whether I am getting the correct output which I am supposed to get. But here as we discussed earlier that this exhaustive test set is not applicable hence here. So, since we cannot apply exhaustive test set our best bet is to target the likely faults or likely defects which may occur during your manufacturing process. So, this brings us to a point. So, now here if I say that here I have to target few likely faults or defects let us define the basic terminology. We use three different terms defect, force and error. Defects are the physical flaw in the device which we discussed earlier that what are the various reasons to get defect while you are manufacturing a circuit. Forks are the logical manifestation of these defects. So, that means here due to a defect line may look like permanently in the case of stuck to logic 0 or permanently stuck to logic 1. So, that means here the effect is such that you see the effect like one line is connected to either power line or ground line. And now here when there is a fault it causes incorrect logical operation and then you will get the different functional output. So, now in the presence of a fault you will get an erroneous output. So, here defect is physical phenomena, fault is logical manifestation. So now this is at the device level. If we look at little bit higher level of abstraction then we will see the fault. So, now here so that means if you want to generate or develop a very compact test set we have to go one level of abstraction higher and so that means here rather than targeting defect I should target faults. So, that means here we are modeling these defects in terms of their manifestation as logical faults. So, now here likely the defects depend on the circuit layout or process control and all these likely defects are very difficult to obtain. So, as I discussed then here we go one abstraction higher and model these physical defects as logical faults and that is known as fault model. So now here the question so what kind of fault model we can have? Let us say the very simple fault model that was conceived way back 3, 4, 5, about 5 decades ago. What this assume is that here defects cause a single line to be either permanently stuck to logic high or logic low and that we call as stuck at 0 fault or stuck at 1 fault that means here we assume that any line in a circuit like for example if I have this AND gate. So, it has 3 lines. So now here any line this line can treated as due to defect this can permanently connect to or logic 0 that means ground or permanently connect to your power supply. So that is the very simple model we can use. Now here there are 2 questions. First thing is how good this model is and second is what does this bias. So, first let us look at how good this model is. So, let us say you have a tutorial logic. So, you have transistors now here the possible defect may be this transistor is sorted. If this transistor is sorted then now here what can be be the logical manifestation of this defect that this transistor is sorted. Then of course if this source in that case here this node will always see the ground potential. So, that the ground potential means here irrespective of what you apply at the input signal lines always here you will see 0 or ground potential at line C. Hence here I can say that this physical defect transistor is sorted. We can model as node C or this output line can is stuck to logic 0. In the same way here if I say that this input is open if this input is open in that case here this transistor would not conduct and then here the fallout effect of that is you will see node C is always at Vcc and hence here that you can say that node C is stuck to logic 1. This is the case when in the TTL technology. Look at the MOS technology say in NMOS say first look at if this transistor is sorted. So, first look at if this transistor is open. If this transistor is open in that case here always you will see that this point or node C is always at Vdd. Hence this defect you can model as node C is stuck to logic 1. And if this transistor is sorted in that case here the effect of that would be like here because this is sorted. So, that means here this will look like the node A is always grounded. If it is always grounded then you will see the transistor is always conducting and hence that is same as your transistor sort. So, now here this because the actual defect is this transistor is sort, but now here I can model that as stuck at 0 fold here at logic at node A. So, now here if you see that there are couple of defects which can be modeled as same fold.  Now good thing about the logical fold is that we are assuming that every line can stuck to logic 0 or logic 1 and by and large most of the defects in bipolar technology and NMOS technology we can model as stuck at folds. So, this works reasonably well for bipolar and NMOS technology it is less good for CMOS because couple of defects it cannot a couple of defects cannot be modeled as stuck at 0 or stuck at 1 fold then here we have to supplement that model with another fold model that we have to use while we are testing. So, this gives you a sense that how good this model is whether we can model various defects as folds or not. Now the question is if I model these defects as logical folds then what it bias. So, now here let us look at a 4 input NAND gate it has A, B, C, D as input and Y as output. Now as we say that here we can model the defect as a logical fold and logical fold assume that any line can either stuck to logic 0 or stuck to logic 1. So, now here and keep in mind that here we are assuming single stuck at fold. So, that means here there can be only one fold in the circuit we will discuss whether this assumption is reasonable or not in a minute, but assume that here there can be only one fold at a time in the circuit. Now how many folds can be there? So, now we have 5 lines. So, there can be 10 folds because every line can stuck to logic 0 or stuck to logic 1. So, now here like line A can stuck to logic 0, line A can stuck to logic 1, line B can stuck to logic 0, line B can stuck at 2 logic 1, line Y can stuck to logic 0, line Y can stuck to logic 1. Now the question is how I test these 10 different folds? Now here let us say I apply a test some input let us say I apply 1, 1, 1, 1 as input A, B, C, D what it can test? If I apply 1, 1, 1, 1 then if say if in this circuit if I apply 1, 1, 1, 1 here and say I have stuck at 0 fold here. So, if there is no fold in that case the output would be 1, if this fold is there what will happen irrespective of what I apply here this point is always at logic 0 and by application of this 1, 1, 1, 1 I will get output as 1. So, now if you look at the output of the circuit for the fold free circuit I will get output 0 for faulty circuit I will get output 1 and these are distinguishable output. Hence, I can say that this input can detect this fold stuck at 0. So, now this way here we can say that this will detect stuck at 0 fold to stuck at 0 fold at line A. Now what about the stuck at 0 fold at line B this is B. If I again here if I if there is no fold in the circuit my fold free behavior is 0. Now if there is a fold here and we are assuming that there can be a single stuck at fold. So, now this node would be this point would be permanently connected to ground hence here the fold at line B. Out behavior of faulty circuit would give you output 1. Hence, here again this is also distinguishable. So, that means here we can also detect B stuck to 0. This way we if you work out we can also detect C stuck to logic 0, D stuck to logic 0 and Y stuck to logic 1, because here your fold free behavior is 0 and then if this point is stuck to logic 1 and then always it will give you output 0. So, it is a distinguishable fold free and faulty behavior. So, this vector can detect these 5 different folds. Now if I because I have 10 different folds if I apply a vector 0, 1, 1, 1. Now what will happen if I apply 0, 1, 1 what it can detect? So, if I apply 0, 1, 1, 1 my fold free behavior is 1. What it can detect? If there is a stuck at 1 fold here. So, under faulty condition this input will permanently tie to VDD or logic 1 and hence the behavior of faulty circuit will give you output 0. Hence, again this is distinguishable faulty and fold free output. So, this can detect A stuck to logic 1. This can also detect Y stuck to logic 0, because here your fold free behavior is 1. So, if Y is stuck to logic 0 in that case output would always be 0. Hence, you can distinguish the fold free and faulty behavior. So, you can also detect Y to logic 0. So, this vector can detect 2 more folds. Then in this way if you apply 1, 1, 1 this can detect B stuck to logic 1, Y stuck to logic 0. If you apply 1, 1, 0, 1 then this can detect C stuck to logic 1, Y stuck to logic 0. If you apply 1, 1, 1, 0 you can detect D stuck to logic 1 and Y stuck to logic 0. So, now here if you look at this how and this covers the your entire fault list. These are the modelled folds. So, that means here if I can detect all these 10 different folds I can say that my circuit is fold free, because I covered all modelled folds. Now, how many test vectors we need? We need only 5 vectors. If you apply exhaustive test set in that case you need 2 raise to the power 4 that means 16 test vectors. Now, there is a use reduction to have reduced almost to one third. Now, so and this is sufficient test set to test all the folds in the this circuit. So, now here if you look at more closely what it brings you on your plate? See here your test size will reduce to n plus 1 from 2 raise to the power n, because here you have 1, 2, 3, 4, 4 lines, 4 input lines and so now here and you need 5 test. So, now here that number is 4 plus 1 is 5. You do not need 2 raise to the power n. So, that this is big thing. You are converting a problem from exponential complexity to linear complexity and we discuss that here this exhaustive set we cannot apply, but here anything which is linear we can apply. So, that means here if you have a circuit with say n inputs or that may be 100 in that case if I can convert that problem into n plus 1 it is sufficient for me. So, that means 101 test I need to apply this. So, in this case this fits well. If you have a circuit which is fan out free and single output then again you can say that here you need a test size of n plus 1 test. If there are fan outs in that case here this number will slightly increase by the number of fan outs you have in the circuit, but for fan out free circuit again this relationship holds good. Hence here we can say and if there are fan outs in that case here again this will increase by the number of fan outs. So, means the big thing this brings into our plate is you are converting exponential complexity problem into a linear complexity problem and that is big thing and that is why here we do not target defects we target faults which are logical manifestation of the defects. As I mentioned in last lecture that defect oriented test is still open problem and some of you may provide some good solution which can advance state of the art. So, now here we are converting this exponential problem into linear problem. One thing again to notice is that in this if you look at it closely one test can detect multiple faults or one fault can be detected by multiple test. So, there is no uniqueness relationship between the test vector and faults. So, this gives as opportunity to reduce the number of number of test. Now here our objective is to find out smallest test set that can cover all the faults. So, now here if say this vector can detect y 0 in that case I can choose that and then I do not need to target y 0 again. If this vector can detect 5 faults in that case here these 5 faults again I do not need to test. So, now here there is no uniqueness relationship between the faults and test vector. So, now here say look at this circuit this is a very popular circuit all of you know this is a NAND-NAND implementation of XMOR gate. So, this fault this circuit has 12 different sides. Now here another very important thing that I would like to bring to your notice is that this fault at stem of a fan out point is different from fault at the fan out branches. Because here they may have different manifestation this output though here these outputs are reconversing, but here this may possible that they would not reconverse and this output may go to some primary output and this fan out branch can take you to some different primary output. So, now they have different manifestations. So, in terms of logical error hence here we treat the fault at the input of a fan out point and output of fan out point differently. So, now here we have total 12 different sides hence there can be 24 different faults. Now means working in the same direction earlier we discussed that here if there is a stuck at 0 fault at line h and if I apply input as say 1 0 in that case will it detect this stuck at 0 fault it will because here your fault good circuit value would be 1 and then here faulty circuit value would be 0 and hence this can detect this particular fault. So, now means here we by modeling these faults as a single stuck at fault we can generate a compact asset and we have seen that we can reduce the problem from exponential problem to the linear complexity problem. So, the so first fault model that was given way back about 5 decades ago is the single stuck at fault model that assume that only one net can stuck to logic 0 or logic 1 at a time and so now here the number of faults that you can have is twice the number of nets that the number of lines that you have in your circuit that is linear and that is why we are converting the problem in linear complexity problem. Now, we can argue that how reasonable this assumption is do you think that always we can have only one fault in the circuit or one defect in the circuit though multiple defect can manifest as the same fault as well. So, that may not be reasonable. So, now what is reasonable? Reasonable is that there can be a multiple defects multiple defects may result into multiple faults. Now, you need to target a multiple stuck at fault rather than single stuck at fault. Now, if you look at the number of multiple stuck at fault if assume that there are n number of single stuck at fault or in the circuit or n number of lines or n number of lines or nets you have in the circuit out of the this n line now here any line can give you may be be the fault free. So, that may be fault free or that may may may stuck to logic 0 that may may stuck to logic 1. So, that any line can be be in three states fault free stuck to logic 0 stuck to logic 1. Now, if there are n lines how many total permutations can be be there in the circuit that would be 3 raise to the power n the out of these 3 raise to the power n instances only one instance would be fault free when all the lines are fault free all other instances are fault instances. So, now here the number of fault instances would be 3 raise to the power n minus 1. So, that that means that there can be 3 raise to the power n minus 1 multiple stuck at fault in the circuit again here this problems this problem converts to the exponential problem and all these 3 raise to the power n minus 1 fault may not be targeted. But people observed that if you because of known unique relationship between your fault and and test vector then you are likely to detect large number of multiple stuck at faults. So, in other word if I say test all or or 100 percent single stuck at fault I am likely to detect 80 85 percent multiple stuck at faults using the same test pattern that gives us big relief. And so now this is the standard practice in the standard in the industry that they are using single stuck at fault model and they though that can cover large number of multiple stuck at fault. Now, the so this is one of the very popular and common fault model industry uses. As I said that this single stuck at fault model can can model most of the the defects in TTL, NMOS and large number of defects in CMOS. There are some faults which are like transistor open and transistor sold.  So, that means here we have to to to test for those faults as well and then here another fault model was given for for those kind of faults which are which are not covered by single stuck at fault or the the the transistor stuck open and and the stuck sold faults. Then other kind of circuit that we have in practice are memory. Now, if you look at memory, memory does a very specific operation or job what it does is it stores value what you want. So, logic 0 or logic 1 it retain that value until you would like to rewrite it right. So, what you want is that if you would like to write 0 it should write allow you to write 0 if you write 1 it should allow you to write 1 and it should retain that value until you rewrite that. So, these are so because this does or this performs a limited functionality. So, rather than go going for stuck at kind of fault which is very appropriate for a random logic we go to functional fault model and then then here we model those faults as like whether memory is able to write value 0 or not whether memory is able to write value 0 to a cell or not and whether it is able to retain that value or not. So, these are some of the functional fault model that we use and this reduces the complexity tremendously and hence these functional fault models are being used for memory. Other kind of circuit that we may have in practice are the programmable logic arrays. In that means other than stuck at faults there may there are some other faults which may appear which are unique to PLA those are like here there can be a cross connection between the two lines. So, cross point or bridging faults the circuits like processors perform many operations, but still it is the set is limited like a processor is supposed to execute a couple of instructions those are finite in number and the behavior of each and every instructions is well defined. So, now here what we can do is rather than going for stuck at fault model we may target the functional fault model that means here how instructions are being executed whether it executes that correctly or not. There are some faults which are like which does not lead to the malfunctioning of the circuit if you do not care about the frequency of operation, but they result into malfunctioning of the circuit if you test at certain frequency that means here if you operate your circuit at slower frequency your circuit may work perfectly fine, but if you operate at the designed frequency your circuit may not be able to operate at that frequency and there are there are couple of fault model which were developed to test for such kind of performance oriented fault and those are popular model or transition delay fault model and path delay fault model. Other class of circuit that we have in practices analog circuit unfortunately till today we do not have any fault model like single stick at fault model which was given for digital circuits. By and large the analog circuits are tested against specifications though there were attempts and then people developed some alternate test method that by observing some of the derived parameters of the circuit and which are which reduces complexity significantly. So, these are the various common fault model we use single stick at fault model is pretty common. So, most of the industry do test their circuit for all single stick at fault and delay faults and of course, analog circuits are tested for the analog faults and memory is always tested for the using functional fault model. Now, here let us concentrate on the single stick at fault model which is pretty common and all the circuits are tested for single stick at fault. Now, the question is how I should generate test for each and every fault each and every single stick at fault in the circuit. So, if you have N line in the circuit or N net in the circuit you may have 2 N number of faults. Now, here the question is how I should generate that test. So, say you have this circuit which we discussed earlier a 4 input NAND gate A, B, C, D are the input if I say I have stick at 0 fault here. Now what you means how you can detect that if as we discussed that if I apply 1 1 1 1 as input here always I will get faulty and distinguishable faulty and fault free behavior at the output and hence you can detect that fault. But now I have just reverse problem of the earlier one. Now I have fault at my hand and I want to find out a test vector that can detect that particular fault. What I need that my basic requirement is that whatever input test input I apply that should produce distinguishable faulty and fault free output. So, now here this net is a structural logic 0. Will it ever produce a fault at fault distinguishable output if I apply 0 here it will never produce irrespective of what I apply at B, C and D. Hence this is ruled out. Now what I should apply here if I apply 1 here in that case there is a possibility that it may produce distinguishable fault free and faulty output depending on what I apply at B, C and D. If I apply B as a 0 in that case it will never produce distinguishable fault free and faulty behavior. In both of the cases it will produce output as what would be that output that output would be. So, I apply 1 0 1 1 and output would be 0. So, in both of the cases it will be 0 faulty and fault free behavior. So, now what I want that the line which is stuck to some logic value 0 or 1 I should have at least inverse or opposite value to that. So, now if it is stuck to logic 0 I have to have 1 if it is stuck to logic 1 then I have to have 0. And as I said that this may potentially propagate or may produce faulty and fault free behavior at the output provided that I assign the another input or side input to this gate as known controlling value. So, what is the controlling value of a gate? The value which always determine the output. So, if I apply 0 value to any of the input output would be determined by that our output would always be 1 irrespective of other values. So, now I have to apply known controlling value that what does that mean that if I apply known controlling value to other inputs that means here output would be determined by this input only. So, if I apply opposite value then here output would be distinguishable. So, that means here I have to have 1 1 and 1. So, what it can tell you that if I want to detect a fault here what should be my test vector? First I should have different value or opposite value to the faulty value at that faulty side and other inputs must be at the known controlling value. This is the basic criteria based on that we have to generate a test for each and every fault. Now, there are two mechanism one is the algebraic way. Algebraic way is based on the Boolean algebra. So, if you look at Boolean algebraic manipulation say if you have a circuit with n input x 1 to x n then output of that circuit would be f would be given as f of x 1 to x n. This may be x 1 x 2 plus x 2 x 3 plus x 1 x 2 x 3 plus x 3 x n something like that. Now, always I can decompose this output or this function in sub functions with respect to an input say if I guess all of you know the Shannon's expansion theorem what it says that if I want to decompose this function with respect to x 1 I can write that x 1 dot f of when 1 x 2 x 3 x n. So, that means here this function is the output of the circuit when x 1 is equal to 1 plus x 1 can be 0. So, x 1 bar dot f of 0 x 2 to x n. So, that means here this function would be output of the circuit when x 2 is x 1 is 0. So, that this way I can decompose a circuit. What I want is that if there is a I want to have distinguishable fault T and fault behavior. Now, depending on your fault location and nature of fault in order to test as I said that we have to apply the opposite value to the fault T value at the fault side. So, now if fault is stuck to 0 in that case here the fault T behavior would be given by this one and in order to test that here I have to apply the opposite value that means I have to apply one then your fault free behavior should be given by this one. So, now here what I want this should be distinguishable that means here the XOR of this function and this function should be should evaluate to 1 and that XOR operation is defined as Boolean difference. So, that means what I want is that here this Boolean difference must evaluate to 1 and I have to apply opposite value of the fault T value at the fault side. So, now here if I say that line say x i is stuck to so, is stuck to logic 1 in that case here. So, if x i is stuck to logic say 1 in that case here I have to have opposite value. So, that means here x i should be 0 and del f upon del x i this should also evaluate to 1 what I can say is that here your x i bar dot del f upon del x i should evaluate to 1 this is the condition to detect x i stuck at 1 if x i stuck at 0 in that case what I want that x i should put to value 1 and it should produce the distinguishable fault T and fault free output. So, that means here del f upon del x i must be 1. So, what I expect is x i dot del f upon del x i this should evaluate to 1 this gives you the condition to generate test vector algebraically. So, let us look at example. So, these are the two conditions that I have already discussed now let us look at this circuit. So, the output f can be given as x 1 x 2 plus x 3 now you have to determine or detect stuck at 0 fault at x 2. So, now what should be the condition first thing is x 2 should be assigned with value 1 if it is stuck to 0 if and it should be assigned as value 0 if this net is stuck to logic 1. Now you so now and then here that fault effect should be propagated to the primary output what are the conditions that Boolean difference with respect to x 2 should evaluate to 1. So, that means here this x 1 what is the Boolean difference with respect to x 2 that is x if you put x 2 equal to 1 in this if this will evaluate as x 1 plus x 3 and if you place x 2 equal to 0 in that case this will evaluate to x 3. So, this would be x 3 x 4 with x 1 plus x 3 that will give you x 3 bar x 1 this should evaluate to 1 when this can evaluate to 1 this can evaluate to 1 only when x 1 must be 1 and x 3 must be 1 this gives you the propagation criteria. And so now if you want to generate a test for x 2 stuck at 1 in that case here x 2 must be 0. So, now here x 1 must be 1 x 2 must be 0 and x 3 must be 0 this gives you the detection condition for stuck at 1 fault at line x 2. Now for a stuck at 0 fault x 1 must be 1 x 2 should be the opposite value. So, that means here that should be 1 and output must be x 3 must be 0. So, this is the detection criteria what if this x or this your Boolean difference is 0 that means that your circuit is not able to transfer the fault effect to the primary output what does that mean that this input or this signal is not contributing in making a decision. So, that means this input is redundant input hence though those faults are known as redundant faults. So, now this methodology will either give you the test vector or it will say that this fault is redundant fault and now here you do not need to test for that because here anyway that fault may not have any implication in your functioning of your circuit hence even if that fault is there you are ok with that. So, now this will give you the faulty so test vector or identify fault as redundant fault. Hence I can say that this method is a complete method this can identify fault as a testable fault and give you the test vector or identify fault as untestable fault or redundant fault. So, now we compute 2 different parameters one is known as fault coverage another is known as fault efficiency fault coverage is defined as the number of detectable faults divided by the total number of faults. So, same way you have total 1000 faults and 990 faults are detectable, but here 10 faults are not detectable in that case here your fault coverage would be something 990 divided by 1000 into 100 that becomes your 99 percent. Why they because here 10 faults are redundant they are coming from the redundancy in the circuit sometimes you have redundancy because of ease of manufacturing or because of ease of design like for example, if you design a 4 bit adder you do not design that 4 bit adder with 3 full adder and 1 half adder generally we design with 4 full adders. So, that means here one of the half adder is redundant in that design, but because VLSI favors the regularity and hence we prefer to have 4 full adders and that so that redundancy may so due to that redundancy we get lower fault coverage. We define another term or metric to evaluate how good our test is that is referred as fault efficiency. Fault efficiency is defined as total number of detectable faults divided by total number of faults minus total number of redundant faults though those you identify as redundant faults. So, like here now in this example we say that 990 faults are detectable and 10 faults are identified as redundant faults. So, that means here this is 1000 minus 10 multiplied by 100 this gives you the 100 percent fault coverage. So, that means here we are able to detect all the faults which are potentially which are which may cause small functioning of the circuit and this Boolean difference method or algebraic method can give you always guaranteed 100 percent fault efficiency. Now, why I defined these two metric why not only one metric what additional information my another metric gives you fault the difference between the fault coverage and fault efficiency gives you how much redundancy you have in the circuit. So, now, we identify the kind of redundancy so now in the circuit and then if it exceed beyond the limit certain kind of redundancy is admissible to us say may be 10 percent redundancy in the circuit may be admissible. So, now if redundancy is below 10 percent it is otherwise test engineer has to report this information to the design engineer say that look your redundancy in the circuit it is 30 percent are you ok with that if he is not ok then he has to resynthesize his circuit and bring down the redundancy in the circuit. So, again this is the another task of test engineer to identify redundancy in the circuit and report it back to the test design engineer if it exceed beyond the certain limit or beyond the tolerance limit. As I said that here due to certain reason like here means in order to minimize the propagation time or delay of the circuit or if it results into regular structure here we deliberately introduce redundancy sometimes in the circuit. So, this is the algebraic way to generate test set. Now, the problem here is always we need to do bullion manipulation and bullion manipulation is not feasible for fairly large design which has say several 100 million kids. So, this approach is not scalable in order to have scalability here we have to go for algorithmic methods and some of the algorithmic methods were proposed in the literature which are based on the past sensitization algorithm those were D algorithm which was first complete algorithm given by Roth from IBM in 1966. Then there were improvement on that method and the another algorithm which is known as Podem and that was given by Goyle from IBM again in 1981. Then and this algorithm Podem was almost 100 times faster than D and then the another faster variant was developed by professor Fujiwara from Osaka University at that time that was known as FAN in 1984. So, these are the three basic algorithms and most of the today's CAD tools are largely based on either Podem or FAN algorithm. Then there were several improvements in which they tried to support these algorithms by learning from the circuit and those are two of the popular algorithms are Socrates and Spirit. All these algorithms are based on path sensitization. So, this path sensitization based algorithmic method to generate test we will cover in the next lecture. With this I complete this lecture here. Thank you very much for presence full listening.


Yeah, good afternoon and welcome back to NPTEL lecture series on Classics in Total Synthesis Part 1 and we have been discussing about total synthesis of many alkaloids and today we also continue to discuss one more complex alkaloid called manzamine. So manzamine as you can see from here it is quite a complex molecule and it was isolated 1986 from marine sponge called Okinawan sponge and from the structure one can easily make out how many rings are there and how many chiral centers are there. It is a quite challenging molecule and because of its complex molecular architecture several groups were interested in the total synthesis and the first person to complete the total synthesis was Geoffrey Winkler and today we will talk about the total synthesis of manzamine by Winkler's group. After the isolation of manzamine there were 100 manzamine alkaloids which were isolated from various species belonging to 8 different families and they generally show a very good activity against malaria and as I mentioned Winkler was the first one to report the total synthesis in 1998 and there are other synthesis afterwards but today we will talk only about the total synthesis of manzamine by Winkler's group. So his group the retro synthesis of manzamine was based on 3 or 4 key reactions, 3 or 4 key reactions. The first key reaction was the pitted sprinkler reaction to construct this ring pitted sprinkler reaction. So we will come to that what is pitted sprinkler reaction and then the second key reaction was you know the cyclization and to form the macro cycle that is also very important from the size of the ring which is being formed during the synthesis and the third key reaction which is of course you know combination of 3, 4 reaction is an intramolecular managed reaction you can see you have an imenium ion here okay and anion generates here and then attacks and then utilize the positive charge on the nitrogen which as you know it is a managed reaction. This is an intramolecular managed reaction and this is obtained this imenium ion is obtained by series of rearrangement and that started from this cyclobutane okay. So here it undergoes a retro managed reaction and followed by managed reaction okay. So when I discuss the total synthesis you will know what exactly I mean okay. So once you can see the cyclobutane the simplest reaction one can use to make cyclobutanes is a photochemical reaction. So this can be disconnected into this compound where you have 2 double bonds and under suitable photochemical condition it should be possible to make the cyclobutane using intramolecular 2 plus 2 cycloaddition reaction and this can be obtained from this enone okay and if you look at this carefully this can be obtained from this bicyclic compound okay. So these are the key fragments this is a fragment 1 or starting material I would say starting material 1 and starting material 2 in the synthesis of manzamine by Jeffrey Winkler okay. Now as I said there are 3, 4 key reactions which Winkler has used in the total synthesis of manzamine. The one key reaction is the intramolecular 2 plus 2 cycloaddition which is also called demyoreaction. One of the oldest reaction known in the literature photochemical reaction known in the literature is this demyoreaction. Carvone a commercially available monotirpene can undergo an intramolecular 2 plus 2 cycloaddition reaction between these alkene and other alkene. One is electron rich other one is electron deficient and in fact under sunlight also this can undergo if you keep it for long time to see these 2 plus 2 cycloaddition to take place okay. And the pigtail sprinkler reaction is if you have phenyl ethyl amine okay. Then this one treatment with aldehyde or protected aldehyde in the presence of acid it can undergo cyclization basically what you are doing is you are introducing the CH2 or CH if you are using aldehyde okay. So this is how one can cyclize okay cyclize to form a 6-membered brain okay. Now let us see how the starting materials are prepared before we actually go into the complex total synthesis how the starting materials are prepared for the complete synthesis. The first the pyridine nitrogen was benzylated okay. When pyridine nitrogen was benzylated it becomes quaternary ammonium salt okay. Then one can reduce this imenium with sodium borohydrate. So 2 such successive reaction one can remove 2 double bonds of pyridine okay. So that leads to the formation of this allylic alcohol okay. So very simple reaction first you have to benzylate followed by reduction of the successive imenium ions with sodium borohydrate you get the corresponding alkene okay. Only 1 double bond is there. Now he wanted to remove the benzyl and then protect it as bog for that he has to do a 2 step process first he treated with chloromethyl for meat. So what happens the lone pair on the nitrogen attacks the carbonyl and then chlorate comes out first. So this is the intermediate this is the first intermediate nitrogen attacking the carbonyl and chlorine coming out. Now the chloride which comes out attacks the benzylic carbon attacks the benzylic carbon and breaks the Cn bonds so that nitrogen will be now neutralized. So in the process what happens the chloromethyl formate removes the benzyl group okay removes the benzyl group has benzyl chloride. So now you have removed the benzyl at COTME but as I said he wanted to protect the nitrogen as bog protecting group. So again he treated with potassium hydroxide methanol and followed by a treatment with bog anhydride he could get N-mog okay. So the next step is to make this as a good leaving group as you know which should be converted into bromide or mesylate or tosylate or triplet so that an SN2 reaction can take place at that carbon. So here the hydroxyl was converted into bromine using a standard triphenolpastamine bromine immunosol treatment so to get the corresponding allylic bromide okay. So now one small fragment of manzamine is ready. Next how you can introduce the chiral center okay how you can introduce the chiral center. So for that he started with soda feed ring okay. So now this carbon has two acidic protons okay one can treat with LDA of course you need excess LDA because you have free hydroxyl group then quench with this allylic bromine okay. So that is how you introduce this chiral center okay. So now you could see one new chiral center has been introduced once the chiral center is introduced then you have to cleave the chiral oxalary okay. So cleaving the chiral oxalary can be done but before that the free NH2 should be protected. So the NH2 was protected as allyl oxy carbonyl group this is called alloc alloc is allyl oxy carbonyl group. So the corresponding chloride you take and treat with base you get the NH protected as alloc protecting group. So now as I said you remove the chiral oxalary once you remove the chiral oxalary you have the corresponding carboxylic acid. Now if you look at this carefully this is substituted amino acid is not it? This is substituted amino acid but unnatural it is not a naturally occurring compound it is an unnatural amino acid okay. So now one fragment is ready what you do you convert that carboxylic acid convert that carboxylic acid into a vaned up amide. So why vaned up amide is required because once you have vaned up amide if you treat with the Grignard reagent or if you treat with reducing agents like LAH or diabol you will get only corresponding aldehyde. If you treat with Grignard reagent you get corresponding keto. So here what they want was they wanted an aldehyde okay. For that once they made this vaned up amide treatment with either diabol or LAH gave the corresponding aldehyde okay. So I have written this structure you know I rotated this 180 degree so as I leave it for a few seconds just see this carefully okay just I rotated this by 180 degree okay. So here if this is alpha this is beta okay. Then once you have aldehyde then this long chain compound okay a vitic reaction was done on this aldehyde to get the corresponding cis alkyne. So this is vitic reagent can be easily prepared from the corresponding diol. So if you have this diol okay what is this diol 1, 2, 3, 4, 5 pentane diol if you have pentane diol you can selectively protect one of them as TBS ether okay. Then the other alcohol you converted into bromide and then make the vitic salt then you do this vitic reaction okay. So what is left now you have to do this cyclization here you have to do the cyclization here okay. So for that first you have to remove the TBS group okay. The TBS group primary TBS was removed using PPTS methanol then converted that alcohol into a good leaving group that is tosylate okay. Now sodium hydride and THF what happens this NH that is actually proton okay. So sodium hydride will remove that proton so you form N minus that N minus will intramolecularly attack the carbon bearing tosylate so that SN2 reaction will give this ring okay. So now we have made the bicyclic compound okay. You know we have to make 2 more rings okay. Once you made this that alloy group the protecting group should be removed so that is normally done under palladium catalyst so tetrakis palladium removes the allyl oxy carbonyl group so that is how we get the free bicyclic compound which is ready for further transformations okay. Now the other fragment okay which is required for the for making the macro cycle that all kind for that again you started from a diol okay you can see 1, 2, 3, 4 butane diol 1, 4 butane diol and the hydroxyl group one of the hydroxyl group was protected as THP ether and the other hydroxyl group was converted into bromide in 2 steps by treating with mesyl chloride followed by lithium bromide okay. So now this alkylating agent is ready then you have to start with the triple bond okay. So the triple bond and the carboxylic acid this also can be easily made in few steps from known starting material. Now if you treat with butyl lithium so more than 2 equivalents of butyl lithium is required 1 to generate anion here other 2 remove this proton. So once you do that then quench with this halide okay so that will give you this long time okay. Now what you need the ester you have to that carboxylic acid you have to convert into ester so that was done by reflexing with methanol in the presence of acid. So now as I said the second fragment which you need is this alcohol so use the ester you treat with windrup amine in the presence of trimethylaminium so this OME will be replaced with this compound okay. So now you have got the windrup amine okay. So if you see here the required compound has said triple bond and here you have the windrup amine. So basically what you need is you need to add a triple bond to that. So the simplest one is the corresponding acetylene grignard okay acetylene grignard in THF directly will give you the second fragment which is required for the total synthesis of Mansor. So now we have these 2 fragments the next step is to carry out the intermolecular Michael addition reaction. So you have the Michael acceptor and here you have the nucleophile. So intermolecular Michael reaction takes place first and that gives you this product that is the one which is ready for intramolecular DMAO reaction that is 2 plus 2 cycloaddition reaction. So you can see when you looked at manzamine the molecule was looking very very complex isn't it. So you disconnect the molecule in such a way that you got into 2 simple fragments. Once you have these 2 simple fragments what you have done you are doing now an intramolecular intermolecular Michael reaction. Intermolecular Michael addition gives you the precursor for the photochemical reaction. Once you have that carry out the intramolecular 2 plus 2 cycloaddition reaction that gives this intermediate and this intermediate actually it does not stop there you do not get this intermediate you do not isolate what happens as I mentioned when I talked about retro synthesis it undergoes a retro managed fragmentation. So that means you can see this lone pair comes here and opens up the opens the cyclobutane to give this product the lone pair opens the lone pair on the nitrogen opens the cyclobutane to give this intermediate. Now what will happen the O minus O minus can directly neutralize the iminium ion the enolate can neutralize the iminium ion if that takes place what you will get is this tetracyclic compound but what you want is not this what you want is cyclization at this between this carbon and this carbon.  Now once the iminium ion is formed then you can see it can generate enolate on this side as well as the other side okay. If it generates on the top that will give you a 4-membered ring if it undergoes intramolecular managed reaction understand if this undergoes intramolecular managed reaction it will give back the original 2 plus 2 cycloaddition product. But if this undergoes intramolecular managed reaction that will give you 6-membered ring which is actually required for man's element. So between 4-membered and 6-membered which one will be favored the 6-membered will be favored so that is what happens and that managed reaction gives rise to the required 6-membered ring. So now if you look at this intermediate carefully so what we have done so we have used say 2 plus 2 cycloaddition retro managed reaction followed by managed reaction to construct the 6-membered ring. So 4 rings are made now what is left is we have to connect these 2 this nitrogen and this carbon we have to connect then we have to introduce the heterocycle here okay let us see one by one how we introduce or how we form this macro cycle. So the primary alcohol you can protect it as TBS and before that what is important is you also have to introduce a hydroxyl group you need to introduce a hydroxyl group here okay how will you introduce a hydroxyl group okay one you can straight away treat with base you can straight away you treat with base and then treat with you know MCPBA there are many methods to introduce hydroxyl group but at the same time you also have to introduce an aldehyde here when only you can introduce the heterocycle on the top okay. So what you did so you treated with lithium hexamethyl disolacea which will generate enolate here okay it will generate enolate here and then quench with Mander's reagent Mander's reagent is a reagent which is used for introducing ester group the ester group next to ketone so the ester was stereo selectively introduced okay then as I said you also have to introduce a hydroxyl group here you have ketone and you have an ester and then ketone group can be easily reduced in the presence of ester sodium oregano will reduce ketone to alcohol that alcohol can be converted to mesalate and mesalate you know is a good living group that can be on treatment with base can be converted into that double bond. So now when you do that obviously you will get a mixture of alkenes one is the alpha beta and saturated ester which is obvious the other one the beta gamma and saturated ester okay both eliminations are possible okay but what is required is this one because you need to introduce a hydroxyl group here that means you should try to explore the functionalization of this double bond how do you do now you isomerize the alpha beta and saturated ester to the beta gamma and saturated ester then treat with MCBB that MCBVA will give the corresponding alpha epoxide now it is very easy the ester you can generate enolate here isn't it then the enolate can open the epoxide so what you will get is a double bond as well as a hydroxyl group at gamma position yeah so sodium ethoxide here acts as a base and then opens the epoxide and that is how you introduce the hydroxyl group okay then as I said now it is time to construct the macrophage so first you have to remove the TBS group the TBS group can be removed with any fluoride source so Tbuff removes the TBS group to get the corresponding alcohol then the alcohol can be converted into good leaving group okay so you treat with tosyl chloride so alcohol is converted into a corresponding tosylate okay then what needs to be done is to remove the BOC so BOC can be easily removed if you use a trifluoroacetic acid and you get the corresponding amine then treatment with base okay like hewnick's base that is a propyl ethylamine will facilitate the hydro molecular cyclization so now if you look at this compound we have made pentacyclic compound okay so now if you look at this compound they have made the pentacyclic compound so what is now required is to attach the indole and form the required six fombered ring before that you have a triple bond okay the triple bond in manzamine is a double bond so one can easily reduce the triple bond in the presence of double bond using Lindler catalyst condition okay Lindler's catalyst reduces the triple bond to cis double bond then you treat this ester with di-ball to get the primary alcohol and then oxidize with DMP to get corresponding aldehyde now you know you can recall why we need aldehyde was as I mentioned one of the key reactions in the total synthesis of manzamine is pigted sprinkler reaction is not it so you have for that you need aldehyde and then what you need for manzamine synthesis is this amine so you have indole you have CH2, CH2, NH2 okay so now with this if you do the pigted sprinkler reaction by treating with type loracetic acid what happen you will get the corresponding six fombered ring okay now what needs to be done in the total synthesis of manzamine now everything is there everything is there you have the core 5 rings then you also introduce the heterocycle but this particular ring is also aromatic this particular ring also aromatic that means you have to oxidize or you have to aromatize this compound so the best way to do is take this compound and then treat with DDQ okay so DDQ will aromatize that particular ring to get the pyridine ring okay what you need is a pyridine ring here so that is how the total synthesis of manzamine was complete so if you look at this total synthesis of manzamine reported by Winkler there are few key reactions one the 2 plus 2 cycloaddition second sequential retro managed followed by managed reaction sequential retro managed followed by managed reaction the retro managed actually opened the cyclobutane ring and the next managed reaction converted that into SX fombered ring then we had the spigtet spingler reaction to construct the pyridine ring from indole ethyl amine okay so thank you


4.30 PM, but apparently it is not the last talk of the day, so I hope you guys aren't too excited to go see the show tonight and are excited to talk about web security. I'm Emily Schechter. I am product manager for the Chrome Security team. And today, we're going to talk about protecting users from deception. So let's start with passwords. It's no secret. Passwords aren't enough to protect account security. We took a look through our search index to see if we could quantify the amount of passwords that have been leaked and published out on the web. And what we found was actually pretty disturbing. 3.3 billion unique username and password pairs. And these were not stolen from Google. These were stolen from many other third parties and breaches. Unfortunately, frequently these passwords on these sites do get reused with us. About 17% of the time, users reuse passwords. Luckily, at Google, we've proactively worked to secure 67 million of these accounts. But other web properties might not be as lucky. Now, it's not all bad news. At Google, I'm happy to report that more than 99.9% of the time, even if an automated attacker has your username, password, or perhaps even knows your phone number, we block their attempts to access an account employing our automatic defenses. But that still leaves some accounts. So let's now focus on the case where an attack would still get through these automated defenses. There are three sources that we see stolen passwords coming from. Fishing attacks, where individual users are tricked into giving up their credentials. Keyloggers, where software installed on the device captures credentials. And data breaches, where large amounts of credentials are stolen at once. And we can compare these three sources of stolen passwords and how many passwords are out there from each source. But what's really interesting to look at is what the source of the stolen password means for account hijacking when someone actually takes over the account. Compared to a generally active account, if your credentials were in a data breach, you'll be 10 times more likely to have your account hijacked. If you had a keylogger installed on your device, you'll be 40 times more likely to have your account hijacked. And if you were phished or deceived into giving away your credentials, you'll be 500 times more likely to have your account hijacked. And that's just a lower bound. So phishing hands down creates the largest vulnerability for web users. Over 90% of information security attacks start with phishing. And phishing was used in 80% of attacks on businesses. Phishing scams are becoming increasingly sophisticated to a point where some are impossible for the human eye to detect. So we absolutely must leverage the wide breadth of tools and technology at Google to keep users safe online. In 2016, we even saw phishing overtake exploit-based malware in terms of the number of unsafe sites that Google's safe browsing technology detects. So for all of these reasons, we built Chrome with security in mind from the very beginning. We think that you shouldn't have to be a security expert to feel safe on the web. So Chrome was built to be secure by default and easy to use by everyone. So I'll now talk you through how Chrome protects you from deceptive sites and phishing attacks. And then later, my colleague Christian will talk through what you as a developer can do to help protect users of your service. Google's safe browsing has helped protect Chrome users from phishing attacks for over 10 years. And Sundar actually announced in his keynote just earlier at I.O. that safe browsing now helps protect more than 4 billion devices every day by showing warnings to people before they visit dangerous sites or download dangerous files. Safe browsing protections work across Google products like Search, Ads, Gmail, YouTube, and they power safer browsing experiences across the internet with the Safe Browsing API. Chrome's integration with safe browsing was built from the beginning to be privacy-preserving. So Chrome downloads a continuously updated list of known phishing and malware websites that are generated by an automated analysis of our entire web index. So each page that you visit and each resource, like pictures and scripts, are checked against these lists in a way that doesn't reveal the websites that you visit to Google. And Chrome's Safe Browsing API is free and publicly available, so you can use it to protect users of your service from dangerous and deceptive sites. Safe browsing has always scanned the web for these dangerous sites. But if a phishing site is created and used for attack moments later, even the quickest scanners can't warn people fast enough. So from our years of experience detecting phishing sites, Safe Browsing's insights can now enable us to make predictions about risks in real time. So we use this knowledge to launch new predictive phishing protections in Chrome this past year. So now when you type your Google account password into a suspected phishing page, we'll add additional protections to ensure that your account isn't compromised and we'll help you reset your Google password. And these protections on your account apply even if you use a different browser afterwards. So what this predictive phishing protection is actually doing is basically password reuse detection for your Google password. So when it sees that you've typed your Google password into some site that's not Google, we're asking Safe Browsing for a real time prediction of whether the site is likely phishing. And we built this detection from the start with privacy in mind. It doesn't save keystrokes or send those keystrokes anywhere. Plus we use client-side heuristics to make sure that we're only asking Safe Browsing about sites when it looks suspicious in the first place. So while password phishing is a hugely important problem to protect against, it's not the only way that scammers might try to trick you to make money. So imagine that you're browsing the web on a mobile connection to maybe access a gaming page. And you're presented with this page that asks you for your mobile phone details. So you fill in the blanks. You want to get to your game with your mobile number. You press Continue. You get access to the content. So the next month, your phone bill comes and you see a big charge that you weren't expecting. Was the subscription to the gaming service really that expensive? Did you really agree to pay that specific price for the service? How much did you agree to be charged to access the content? So what actually happened here was that the site is including this tiny notice to tell you that you're being charged. And even if you notice the text and read it carefully, it's still pretty confusing to understand. So every month, millions of Chrome users encounter pages like this with insufficient mobile subscription information. Surprising charges that come from unclear communication are a poor user experience. So that's why starting in Chrome 71, we launched a new warning before these unclear pages so that users can make informed decisions when they're signing up to mobile-based subscription services. Users are offered the choice to proceed to the page or to go back if they were unaware that they were entering a billing page. So I've just talked through some of the ways that we've improved Chrome to better protect users from deception. I've shown you how safe browsing is relied on across both Google products and external apps to protect against known threats and proactively detect new ones. Defense in depth is important. And at the beginning of the talk, I told you that passwords weren't enough to protect users. So as a developer, you need to be looking at what you can do to strengthen your own services to protect your users. So for that, I'd like to invite Christian up on stage to talk about the latest advances in authentication and security keys and how you can implement them today to better protect your users. Hi, folks. I'm Christian. Thanks, Emily, for the previous section here. What I want to do is talk a little bit more about phishing. As we saw in Emily's presentation, if you are a victim of phishing, you are 500 times more likely to suffer an account breach. So what I want to talk about is what you as a developer can do to help us combat that threat online. So we all know what phishing is, right? It's when some deceptive third party steals your username, your password, and other login credentials. Google has run a study a while back. And we found that about 43% of users in this day and age still falls for phishing scams. So about one in two people today, if you present them with a well-crafted, I guess, illegitimate-like website that looks the same as any other that they are suspecting to ask them for credentials, that user will actually fall victim and reveal their credentials to this third party. And I mean, just to kind of reiterate here, three-quarters of account vulnerabilities were due to weak or solid passwords. And we saw that in a Verizon data breach report recently. So phishing, really, big problem. And we need to do something about that. As an industry, we haven't done nothing, right? We came up with something called multi-factor authentication to try and address this problem. Basically, the way that it works, I'm sure all of you know. I have a username, I have a password. What we're doing here is we are adding another factor to the equation when you're trying to log in. With a password, I normally have to give away something that I know. With multi-factor, I'm adding something else. I'm adding something that I have, something that I physically possess. That can be, you know, access to a phone number. So SMS voice is a very standard. We have doing multi-factor authentication. I try to log in. Someone sends me a text to my phone number. Ideas, by virtue of having access to that phone, I can now prove that I am me. So kind of like trying to prove my possession by, you know, having access to a certain phone number. Backup codes, I don't want to talk about that too much. It's another option you have. Print a couple of codes. Keep it in your wallet and use them when you log in. Not use that often. However, Authenticator, Google Authenticator and other OTP-like solutions, a pretty standard way of trying to do or implement multi-factor authentication, again, proving possession of a phone or another device, like a hardware key fob or something like that. Mobile push is very, I guess, popular these days among services. So when you try to sign in at the point in time when you've typed your username and password, you get a push message on your phone. You have to say yes. And at that point, you're signed in. Proving possession, again, of a mobile phone. Problem with all of these factors are, they are all susceptible to phishing, right? If you are a sophisticated attacker and you can trick a user into revealing their username and their password, you can most likely trick them into giving away their OTP. You can most likely trick them into pressing yes on their phone, accidentally signing you as the bad guy and not the correct user's device. And we've seen that many times. There's many services online available, two hackers. One of the most popular ones that you can download and play with yourself is Evil Engine X.  And then you can man in the middle pretty much any site. Of course, the challenge here is these things are not sophisticated. Or sorry, you don't need to be sophisticated to set these things up any longer, right? It's pretty much, you know, run them all, download the source code and the way you go. So what we try to come up with as an industry here is we try to come up with something better than these solutions. We try to come up with something that actually, you know, helps defeat phishing. And the technology here that Google and a bunch of others in industry have worked together since 2012, 2013 is the FIDO security key protocol. How many here have heard of security keys in FIDO before this talk? Oh, great. OK, fantastic. So some of this stuff will be old news to you. But essentially, the FIDO protocol helps the web server understand whether a user is interacting with a legitimate or a non-legitimate website. Basically, the web origin, so where you're actually on your browser, gets encoded into the signature that the key produces and sends back to the website. That's essentially the way that this works. We're not going to get into too much detail on the FIDO security key protocol in this talk. So kind of anything onwards from FIDO security keys, the world that we're entering here is what we call kind of the world of phishing resistance. When users use these technologies, they are able to help us prevent phishing. Google introduced something last year where one of a number of companies producing a hardware device that implements the FIDO protocols. We introduced something called the Titan Security Key. Many vendors make something similar. FIDO is an open protocol. Any vendor can produce keys compatible with the FIDO protocol that adheres to the standard. And a number of websites online have since adopted support for security keys. Google, of course, being one. Facebook, Salesforce, Dropbox, GitHub, a whole bunch of websites have actually said, yes, we want to offer our users additional protection. Problem with all of this is we need our users to carry around yet another device. Certainly for users that are under threat, maybe the trade-off is something that makes sense. But we wanted to do something even better. We wanted to say, well, users already have something in their pocket most of the time, mobile phone. What can we do to implement the same protocol that prevents or help prevent or stop phishing? What can we do to implement that protocol into a device that users already carry around with them wherever they go? And I guess about two and a half weeks ago, we launched something called the security key built into your Android device. So basically, all this does is the same protocol that makes phishing resistance possible in FIDO is now implemented in your phone. Something that you need for phishing resistance to work is you need a local communication channel between your device you're signing in on and the thing that the proof is the sign-in. That's the thing that really what makes a difference between all of the other multi-factor protocols out there and security keys. A security key is something you plug into your USB port or something you tap on the back of your phone using near-field communications or that you communicate over using BLE. What we've done here with the Android phone is we've implemented the same protocols directly in Android. And we used Bluetooth to establish a local communication channel between your laptop or your desktop and your mobile device. So just one more thing that we've kind of came out with to make things easier for our users to keep their account safe. Right now, it only works on Google accounts, but of course, the intent here is since this is part of the standardized FIDO and WebLine protocols, which we'll talk more about, the idea is to open that up to third parties pretty soon as well so you can implement that. Now, with that being said, what is it that we're actually here to talk about that you guys can do today as developers? So I want to talk a little bit about the W3C and FIDO alliance and just for the folks that don't know how these things fit together, just explain that very, very briefly. We have kind of two industry bodies here that's working together to try and address this problem of phishing on the web. We have the FIDO alliance, which is pretty much the alliance where kind of all of this started.  That happened in the FIDO alliance. We got to a point where the technology was pretty stable. It was implemented in Chrome and some other browsers. And then we said, well, now we want to make it available to the web at large. So we took the protocols to the W3C, the World Wide Web Consortium. And I'm happy to announce at this point that we have a candidate recommendation, oh, sorry, a post recommendation, of the W3C web open protocols available today that not only Chrome implemented, but also some other browsers out there such as Edge and Firefox. So that's basically a bit of background on the way that these two industry bodies work together. A better, I guess, overview explanation here is you might have heard the term FIDO2. FIDO2 is the name that we used to refer to this kind of set of standards. On the one hand, you have the W3C web open standard. That is the JavaScript communication protocol, essentially, that you use between a web server and the browser. So if you're a web developer, that's pretty much the standard that's important to you here. And we'll look at a little bit of code later to see how easy it is to use that. And then there's the standard that we're working on in the FIDO Alliance, which is less important, I think, for the group here, unless you want to actually get into making USB or Bluetooth key fobs, which certainly you could do. The standard is in the open. But essentially, we've kind of abstracted that away from web developers. So that I need to understand the actual bits and bytes that goes over the wire or over the air on the left-hand side here. Something else that I really want to focus on today is that middle piece there. So yes, you can talk using Web of End to the browser, the client, the computer, or the phone, and then that device can, in turn, flop around and talk to a security key. But you can actually also talk to bolt-in sensors on devices. And pretty much all devices nowadays, especially mobile devices, implement secure key storage and implement some form of biometric sensing. For a long while, that biometric capabilities, as well as the key stores, have not been made available to the web. They were available to native developers, if you want to use the fingerprint scanner in an app. That's cool. You can do it. However, if you're coming from the web, that was simply not available to you. We wanted to solve that problem with Web of End as well. And in a couple of slides here, I'll talk a little bit about how we've done that and how that's now available to US developers to use. So before we talk about that, let's just quickly talk about authentication in general. The way that I think about authentication and the way that I've tried to portray this in the slide deck here is that, typically, there's two separate use cases for authentication. There might be more, but for the purposes of your, there's two main sets. Set number one is when a user goes to a web property or to an app for the very, very first time. At that point in time, the goal of the web server or the application server is to figure out if this is the rightful user amongst everyone else on the web, right? So this is what we call bootstrapping. I need to provide my username. I need to provide my password. I might need to provide a second factor. That's when the website needs to kind of falter out everyone else that could potentially try and get into this user. Maybe it's someone who fished credentials, we don't know, and try to log the user in. So that's normally a pretty heavy process. Then we have a second user journey here, which is I've already logged in successfully to a website at some point in time or to an app. All the app is now trying to do is to figure out on this particular device whether it's the right user coming back to the app. Is it me, or is it my friend, or is it someone that just picked up my phone off the floor somewhere? So problem number one is trying to figure out amongst everyone else in the world if this is the right user trying to log into this app. And problem number two is slightly easier. That one is saying, well, I already have restricted everything down to this one single device. At this point in time, who is the actual user trying to come back to this app or service that I've already authenticated into? Many services don't care about the second part. Mostly Google does not. If you've signed into Google on a machine already, you can come back next week. We'll still allow you to come back to the service, right? Banking websites, financial services, payments, they really care about problem number two, right? If you open up the banking website again that you've logged into yesterday, probably gonna ask you to kind of re-establish your identity. So problem number one is the one that traditionally we have tried to solve using multi-factor. And that's where security keys, of course, make a huge difference in terms of phishing resistance. But problem number two is the one that we've solved so far in the app world with biometrics from a convenience standpoint. And that's where we can also apply WebAlthen. Yes, WebAlthen applies to number one. We all know that. We all know we can use security keys to make kind of protect apps against phishing. But what I wanna talk about today is specifically use case number two. How can we make it easy for returning users to our application or our web service to get back into our service without having to subject them to re-entering passwords, right? That's kind of the old way of doing things. Today, we can move to biometrics. So that's really what I wanna talk a little bit about because WebAlthen really does solve both of these use cases. So before we get into some code samples here, let's talk a little bit about the implementation and how this works on Android. So as you know, on Android today, if you have an app, app has myriad of choices, right? The app can directly talk to Keymaster in terms of key storage. An app can directly talk to biometrics, right? With biometric prompt API, you can do some pretty advanced things with biometrics on the phone. We have introduced one more choice, one more option for applications on Android. That option is called the FIDO module. And of course, not only does an application have access to the FIDO module, the important thing is Chrome also have access to that FIDO module via the WebAlthen APIs. So this finally gives us parity between applications and web services and websites running on the platform because both of these can talk to the FIDO module and do some pretty nifty things. And we'll look at what those mean in a second. So again, as an app, you have the choice to still communicate directly to Keymaster and biometrics. But what I'd like to convince you here, although this session isn't really about Android native app development, is to start thinking about migrating the use of Keymaster and biometrics inside Android apps if you're responsible for an Android app over to the FIDO APIs, because it gives you some unique benefits, which we'll talk about in another couple of slides here. One thing that I just want to note at this point again is remember, at no point in time does Google or the web service or anything other than the device itself ever get access to the biometric templates, right? These are always stored directly on the device. The only thing that your web server, the remote server, get access to is a proof that a certain Key was available on the device. If you think about this and you'll see this in the code samples here in a second, there is a separate registration step and then there's an authentication step. When you register, we're generating a new public-private key pair, we're putting the private key inside Keymaster, and we're kind of protecting the key with the biometric on the phone. So later on, if your web server needs to have a proof that the same user is at the phone, they will touch their fingerprint, that'll unlock a key, sign a certain piece of data, and send the proof back to the web server. So not only is it completely privacy-preserving as it should be, we're also using asymmetric crypto here, which means the stuff that we hear about pretty much every day now about data breaches and things happening on the server side, this doesn't really affect authentication based on the FIDO module that uses asymmetric authentication because the thing that the server has can't ever be used to spoof a user. The server has the public key that can be used to prove a user was there and had a correct private key, but it can't actually be used to authenticate or masquerade as the user, which is also pretty important, but that's just part of the modern authentication-based practices, asymmetricals. So let's shift gears a little bit and talk through a couple of user journeys. What I want to talk about here is we have someone here called Eliza, and Eliza wants to do a couple of things, and I want to show you the first couple of slides here will be very standard stuff that you've seen on the Android platform for a long time, and then we want to see how we can change things slightly to make it easier for our users to do things like real authentication. So let's walk through an easy example here. So Eliza wants to sign into her bank, something that most of us want to do on our mobile phone. She starts on her mobile browser, and the cool thing here is what we can do with Web of Then is she can then roll a fingerprint directly in the mobile browser and use that to get back to that mobile website later on in another example. So let's look at this. This is the standard part. Open up tribank.com, fictitious bank here. Click sign in. We all know this, type in the username, type in the password, pretty straightforward. This is the day zero bootstrapping scenario. The very first time she comes to this website on this particular device. Cool thing here is once she's done that, suddenly tribank presents her with an interstitial, and we'll see how that's possible in a second here. Web of Then has a discovery mechanism whereby you can figure out whether the platform that you're interacting with has these capabilities built in at this point in time. That'll only return true, essentially, if the device is capable of doing biometric authentication at this point in time on the web, and if that happens, you can present a nice interstitial that tells the user about this functionality. So that's what we're doing here. We're saying, hey, mobile banking is not just one touch away. Do you want to enable fingerprint? Of course, Eliza clicks yes. She wants to enable fingerprint. That then talks down to the biometrics creating a new public-private key-keeper, sending the public key to tribank, and they now have that on file. So what's really cool here, if we look at the code, what happened, that super long, I guess, function call there, ease user verifying platform authenticator available is what tribank used on their website to determine whether a biometric capability was present on this phone at this point in time. That'll only return true, by the way, if Eliza actually had her phone set up with a fingerprint and everything beforehand.  And then, way both end, it's very, very straightforward. Really, only two calls you need to be concerned with. The first one is create. That says, make me a new public-private key-keeper and give me back the public key so I can keep it on file. And then later on, we'll look at the other call, which is called get, which is, hey, I now want to authenticate. So basically, all you need to do is create. Of course, you need to pass in a couple of options. What does those look like? Pretty straightforward here. Something called exclude credentials. Don't have to be concerned with that too much. Essentially, that just means if Eliza actually already have her fingerprint and her keys registered on this device, don't register them again. Just let us know if that's the case. So that's what exclude credentials mean. And then we can say a couple of things. What type of authenticator do I want? As I said earlier, for a call, we have multiple use cases for WebOthen. One is using an external security key during bootstrapping. The other one is using a built-in authenticator for reauthentication. Here, we're concerned with the reauthentication and built-in authenticators. So we are explicitly saying, give me a platform. That means built-in authenticator. Don't bother the user with questions about external security keys. They don't want to do that. I just want a biometric that's built into the platform, which is why we say platform. And then lastly, I already kind of said biometric. The last option here is, I need the user to verify their identity before releasing the signature in the future. That means I actually need the user to touch their fingerprint on a sensor, as opposed to just clicking on a prompt saying yes. So I want the user's identity to be confirmed before releasing a signature, which is what the last option there is all about. So now Eliza comes back. That's probably, as we would expect, that's the second part of this journey. She registered her fingerprint at some point in time. Now she comes back to try back. Clicks on sign-in. Don't have to type a username. Don't have to type a password. All she does is presses her fingerprint on the sensor, and she is magically logged in. Now let's look at what happened there. Pretty straightforward. All we had to do here is issue a get call. Get says, hey, get me a signature. Again, you need to pass stuff in. Basically, you pass in a identifier that you got back when you created the credential in the first place. And again, you say, hey, at this time, please verify that the user is there, which basically tells the system to bring up a fingerprint prompt, as opposed to just a simple yes, no. So very, very straightforward. Three calls that we discussed here, right? The first one is user verifying platform authenticator available, or is UVPAA for short. That tells us whether the capability is available. Then we created a credential, and then at the point in time when we want to authenticate, we did the get. And all of this was already available, of course, to native applications. Although you had to kind of bold these capabilities up yourself, right? There's different ways in which you can bind the fingerprint and bind it to a certain key that you've put in key store. Developers had to bold all of that themselves. What we're doing here is we are giving you a standardized way on the web to actually communicate with these key stores and biometric components and give you back standardized signatures that you can use to validate. And of course, the last thing that we're going to look at here is, what about native applications? What if I want to use this great capabilities directly inside a native application? Yes, I can do that already today. But it comes with a little bit of pain, right? It comes with you basically building all of these capabilities yourself. The cool thing about integrating these capabilities into your mobile application as well as, for the first time now, there's context sharing happening between the web and the app. Remember that credential we just created on the web when we said, make this fingerprint credential, make me a new key pair? That same key pair will be accessible to the mobile application when Eliza moved there. How does that work? Well, let's look at that. So Eliza goes to the tri-bank application on the app store because she's tired of using the web experience, clicks Install, opens up the app. At this point, the experience I have depicted here is she clicks Sign In and types her username. At that point, the server can realize, oh yeah, this Eliza person that's trying to log in, I already have a credential for her on this particular mobile device. And suddenly, a fingerprint prompt appears, no password needed, no second factor needed. I just touched my fingerprint because I'm accessing the same credential that I created a while ago on the web component. How does this work? How is this possible? We use something called Asset Links. If you're familiar with some of our other technologies where we can directly get access to credentials and other things, Asset Links is a way to tie and prove ownership between a website and the mobile application. This is all documented later on. There will be some URLs, Asset Links in the process here that you need to follow is all documented on the website, so it's pretty straightforward. But essentially, as a developer, you prove ownership of both the application and the website, and that then allows you to share credentials and state between the two. So no longer do you have to log into the website and to the mobile app. Once you've bootstrapped the one, the other one can kind of just hang off it because the context and the authentication context here is both shared. If we go back to that earlier picture that we had, the key store and the biometric component is shared, the phyto module sits on top, and both the web and the apps can talk to that exact same phyto module and get access to the same underlying credentials, which is very important here. What happened behind the scenes? Of course, this is in JavaScript, but it's very, very similar, right? Again, we're doing here something called get, right? We do get, here it's a get sign intent. Again, we're passing options, exactly the same options. We're passing the credentials, the credential ID, essentially, the handle of the credential we want to use. We got that back when the user tried to log in using a certain username. The server came back with a list of credentials for Eliza, and again, we say, we want to do user verification. We want the fingerprint prompt to actually appear. That's what we passed in there, and at that point, the phyto module took over and sent back a signature that can be validated by the web server at the back end. So, let me quickly highlight two case studies here. We have had this capability out for the last couple of months. We just recently revamped our documentation. So, if you have taken a look at that before, please take a look at it again. Folks, you did a great job at actually making that really easy to understand both on the web and on the mobile side. Yahoo Japan implemented reauthentication using this fingerprint mechanism, and they were able to reduce their time to sign in by 37.5% compared to that of a password. So, certainly a big user experience improvement, just helping users save time, right? Pretty straightforward there. At Google, as maybe you've seen in the web keynote this morning, we have also implemented this on passwords.google.com. We're in the process of rolling that out. We've got a little bit more info on here. We found that 98% of biometric reauth users finish their authentication in 38 seconds versus 98% of users who finish entering passwords in 150 seconds. That's really, really significant if you think about it. Not only that, if you look at the graph down there, what's really interesting here is that essentially the success rate from reauthenticating using a password at 65% bumped up all the way to 89% when you're using biometrics. And it's a very, very straightforward why, right? The big red piece disappeared. What is the red piece? It's users entering the incorrect password. That disappeared when you're moving over to biometrics because there's nothing that you have to remember. And remember, most of the time when users reauthenticate and can't enter the right password, it's not because it's the wrong user at the system. It's just that the user can't remember their password, right? So you're locking out the legitimate user, kind of like making things easier and making it more reliable for the user to get back into the system. So essentially the 23% disappeared, which is why we're almost at 90% success rate. So we think that's very, very important. So with that, I would like to invite Emily back up on stage to do the wrap up for us. All right, so at the beginning of the talk, we told you that passwords aren't enough to protect your account security and that the risk of account hijacking increases by 500 times if you got phished. But now we've showed you how Chrome's built-in phishing protection with safe browsing can help, and we've showed you how security keys can help. In fact, here at Google, there has never been a successful phishing attempt on a Googler since we implemented security keys. Users hate passwords, right? So you owe it to them to implement WebAuthn to enhance security and usability. So when you guys leave I.O. and return to your laptops, here's your checklist to get started. Get a Fido server, implement WebAuthn, create and get. And if you want, link it with your Android app for a seamless login experience. And if you're interested in learning more, you can swing by the web sandbox area or you can come find us outside or up here after the talk, and we'd be happy to answer any questions. Thank you.